web-dev-qa-db-ja.com

Vim:ディレクトリ内のファイルに設定を適用する

現在のディレクトリにあるすべてのファイルにVim設定を指定するにはどうすればよいですか?

理想的な解決策は、Vimが〜/ .vimrcを検索する前に現在のディレクトリで.vimrcを検索して読み取り、そこに設定をツリー全体に適用する場合です。

plugin を見ましたが、これはプラグインをインストールする必要があるため、適用された設定が透過的ではないことを意味します。対照的に、ユーザーのvimrcまたは特定のvim呼び出しに関係なく、モードライン設定がそのファイルに適用されるため、モードラインは透過的です。

私が試したものは

  • 作業ディレクトリに.vimrcを配置する
  • :so vimrcモードラインで。

セキュリティ上の理由から、どちらも機能しないと思います。 vimrcの全機能は必要ありません。モードラインで受け入れられる設定にバインドされていれば十分です。私の目標は、初心者がプロジェクトでコーディング標準を簡単に採用できるようにすることです。

98
wilhelmtell

私は plugin way の支持者です。いくつかの理由で:

  • モデリンは特に制限されています:変数(「for-snippetのブレースを改行にする必要がある」など、他の(ft)プラグインを調整する)を設定したり、それらから関数を呼び出したりすることはできませんコーディング標準に合わせて、現在のディレクトリに応じてmakefileを使用するように設定します)
  • [〜#〜] dry [〜#〜] :モードラインでは、すべてのファイルで設定を繰り返す必要があります。設定するものが多すぎる場合、または変更するチューニングが多すぎる場合、すぐに困難になりますさらに、維持するには template-expander plugin を使用する必要があります(プロジェクトに複数のvimmerがある場合は、これを考慮する必要があります)。
  • すべての人がvimを使用して開発するわけではありません。他の編集者の設定に煩わされたくないのですが、なぜ彼らの設定を寄生する必要があるのですか?
  • .vimrcの同じ行をコピーして貼り付けて維持するように依頼する代わりに、同じプラグインをインストールするようにvimmerに依頼する方が簡単です
  • 設定は他のプロジェクトファイル(cvs/svn/git/whatever)で保存できます。
  • プロジェクトごとに構成ファイルを作成するのは本当に簡単です-プラグインを使用すると、プロジェクト全体のコーディング標準のグローバル構成ファイルと、各サブプロジェクトの特定の構成ファイル(使用するmakefile、呼び出す実行可能ファイル)があります、...)

ところで、 sth's solution を使用して、単一の構成ファイルを入手できます。これは、.vimrcを非グローバルオプションで寄生する必要があることを除いて、プラグインアプローチに非常に似ており、複数/共有の構成ファイルを簡単にサポートしません。

42
Luc Hermitte

このようなものを$VIM/vimrcに入れることができます

autocmd BufNewFile,BufRead /path/to/files/* set nowrap tabstop=4 shiftwidth=4
86
sth

set exrcを使用しないことを強くお勧めします

* nixの下のset secureを使用しても、ファイルを所有している場合、vimはシェルなどの自動コマンドを実行します。そのため、たまたまそのtarballのファイルを編集した場合は、次を含む.vimrcを送信しました。

autocmd BufEnter * :silent! !echo rm -rf ~/

あなたはおそらく私よりも面白くないでしょう。

49
phen

この質問は古いですが、それはかなり自然で永続的な懸念のようです。

私の解決策は非常に簡単です。プロジェクトのルートディレクトリに.vimrcファイルを配置します。 .vimrcファイルの最初の行は、通常~/.vimrcをソースにした後、必要な特定の構成を追加します。 tvim='vim -u .vimrc'のエイリアスを作成し、個人のプロジェクトディレクトリでtvimを使用します。 「信頼されたvim」の「tvim」。つまり、.vimrcファイルのあるディレクトリで実行すると何か問題が発生した場合、信頼できると明示的に言ったので、自分以外の責任はありません。また、特定の種類のプロジェクトに必要なものをソフトリンクできるように、これらのグループを保管しておきます。

28
joseph07

.vimrcの作業ディレクトリへの配置は実際にサポートされており、デフォルトでのみ無効になっています。詳細については:h 'exrc'および:h startupを参照してください。'exrc'を設定すると、現在のディレクトリから.vimrcの読み取りが可能になります。

これを使用する場合は、:set secureもお勧めします。これにより、:autocmd、Shell、および現在のディレクトリの.vimrcのコマンドがロックされます。

見る価値があるもう1つのことは、プロジェクトの標準ビューと設定でセッション(:h session)を設定することです。

そうは言っても、おそらく自分でLuc Hermitteが詳細に説明したプラグインオプションを使用します。

20
gravious

最近の「自動実行」機能でセキュリティリスクを最小限に抑えるには、プラグイン(携帯用荷物)の代わりにvimの既存の機能を利用することをお勧めしますか?

例えば。

ローカルフォルダーのvimrcファイルの名前は「_gvimrc」です(意図的に)。これは、私たちの費用でフェンのような人々が自分自身を面白がらせることからの希望を減らします。 :-)

私の$ VIM/.vimrcファイルに、以下を挿入しました:

if filereadable("_gvimrc")
    source _gvimrc
endif

最後に。

私は「fileexists()」よりも「filereadable()」を使用します。複数の(10+)ファイルを同時に開くことで拷問された場合、後の方がいくらか奇抜なためです(理由はわかりません)。

もちろん、潜在的なトラブルメーカーをさらに難読化するために、独自の一意のファイル名を与えることができます。 「_mygvimrc」、「_ gobbledygook」など。標準化された名前を1つ決めて、それを$ VIM/.vimrcでソースするだけです。このためにvi/vim内部に依存すると、移植性の問題が排除されます。ただし、後でvimを使用して$ VIM/.vimrcファイルを編集している場合に再帰的なソースを防ぐために、.vimrc(または_vimrc)という名前を付けないでください。

Windoze 98SE以降、Windork XP Pro、そして現在Windorkier 7(5年以上)を使用してこれを使用しています。Explorerで.txtファイルのリストをマークし、[編集]複数のvimウィンドウが同時に開くことになります。仕事では、これを1日に数回、毎日行います。すべてのファイルは、ローカル_gvimrcで設定したもので処理されました。

10
XEQtor

人々が数日ごとにファイルを追加しないと仮定すると、おそらく各ファイルの上部にモードラインを追加できます。実際、バージョン管理システムで許可されている場合は、チェックインするときに各ファイルにモードラインが必要であるという規則を実施できます。

2
Nathan Fellman

セキュリティ上の理由からプラグインのアプローチに同意します。

まだ言及されていない非常に優れたプラグインがあります。プロジェクトディレクトリで.lvimrcを使用できます。

「localvimrc」を試してください。

http://www.vim.org/scripts/script.php?script_id=441

https://github.com/embear/vim-localvimrc

2
asgeo1

Vim-localrcを試す

~/
|- .local.vimrc     (1)
`- project/
   |- .local.vimrc  (2)
   `- src/
      |- .local.vimrc   (3)
      `- main.c

https://github.com/thinca/vim-localrc/blob/master/doc/localrc.txt

1
Touv

「editorconfig」を使用します

実施するコーディング標準の種類がインデントスタイル、タブサイズ、ファイル形式、文字セットに関連している場合は、クロスエディタ標準である "editorconfig" を調べてください。特定のプロジェクトでこの種の設定を指定し、すべてのエディターがその構成に従うようにします。

「editorconfig」仕様により、プロジェクトはファイル拡張子またはプロジェクト内の名前に応じて異なる設定を要求できます。 (つまり、TABを使用してMakefileを作成し、Pythonスクリプトで4つのスペースを使用し、シェルスクリプトで2つのスペースをインデントに使用できます。)

Vimで「editorconfig」を使用するにはプラグインが必要です。公式Webサイトでは提供されていますが、個人的には sgur/vim-editorconfig をお勧めします。これは純粋なVimscriptで記述されているため、外部の依存関係についてあまり心配する必要はありません。

「editorconfig」はクロスエディターの互換性を目的としているため、その機能は非常に限られているため、一貫性のある空白、ファイル形式(DOS対Unix)、エンコード(Unicode utf-8など)が必要です。 " あなたのためです。

1
filbranden

存在するプラグインを見て、それらのどれもあまり気に入らなかったので、 vim-fugitive に便乗する単純な関数を書きました。これの利点は、プロジェクトのルートが常にリポジトリのルートであることを知っていることです。さらに、ファイルをハッシュして信頼テーブルを保持できます。 .vimrcファイルに次を入力するだけです。

function LoadRepoVimrc()
  let l:path = fugitive#repo().tree('.vimrc')
  if filereadable(l:path)
    let l:sha1 = fugitive#repo().git_chomp('hash-object',l:path)
    if !exists('g:SAFE_VIMRC') | let g:SAFE_VIMRC = {} | endif
    if has_key(g:SAFE_VIMRC,l:path) && g:SAFE_VIMRC[l:path] ==? l:sha1
      execute 'source '.fnameescape(l:path)
    elseif confirm("Trust ".l:path."?", "&Yes\n&No",2) == 1
      let g:SAFE_VIMRC[l:path] = l:sha1
      execute 'source '.fnameescape(l:path)
    else
      execute 'sandbox source '.fnameescape(l:path)
    endif
  endif
endfunction
autocmd User FugitiveBoot call LoadRepoVimrc()
set viminfo ^= !

!オプションがviminfo設定で設定されている場合、SAFE_VIMRC辞書は実行間で保持されます(オプションを先頭に追加しないように^に注意してください) nオプションを台無しにします)。

0
Parakleta