Vim で現在のディレクトリから .vimrc 設定を自動的に読み込むにはどうすればよいですか?

Vim で現在のディレクトリから .vimrc 設定を自動的に読み込むにはどうすればよいですか?

実行、ビルド、テストに異なるコマンドを必要とするプロジェクトがいくつかあるため、各プロジェクト ディレクトリに、いくつかの F ボタンへのマッピングを定義する .vimrc ファイルを配置しました。vim ヘルプ ファイルには次のように書かれています。

'exrc' 'ex' ブール値 (デフォルトはオフ)
                        グローバル
                        {Vi にはない}
        現在の.vimrc、.exrc、.gvimrcの読み込みを有効にします。
        ディレクトリ。

そのオプションを有効にしましたが、:cdディレクトリに入ると .vimrc ファイルが読み込まれません。 と書き込む:so .\.vimrcと正常に読み込まれます。なぜ自動的に読み込まれないのでしょうか?


私は Windows 用の gVim 7.3 x64 を使用しています。

答え1

_vimrc'exrc'が設定されている場合、現在のディレクトリで、.vimrcまたはという名前のファイルが検索されます。_exrc 起動時:cdこれは新しいディレクトリに移動するときに毎回実行されるわけではありません。

:help .vimrc

答え2

私の意見では、これが最良の選択肢です:

if getcwd() =~ '^\(/my/safe/dir1/\|/my/safe/dir2/\)'
  set secure exrc
endif

出典:http://vim.wikia.com/wiki/Open_vimrc_file しかし固定構文

答え3

vimバージョン8.1^には、autocmdイベントがあります。方向変更プロジェクト固有の評価に使用できます.vimrc。このイベントがいつトリガーされるかについての詳細は、次のとおりです。

DirChanged = Working directory has changed in response to the |:cd| or |:lcd| commands.

動作例

私は vim-script の専門家ではありませんが、プロジェクト フォルダーに移動する.vimrcとプロジェクト固有のファイルを読み込む次の関数を作成しました。この関数をメインファイルに貼り付けます。cd~/.vimrc

if !exists("*LoadProjectVimrc")
  function! LoadProjectVimrc()
    let vimrcFile = findfile(".vimrc", ".;")

    if !empty(vimrcFile)
      execute ":so" l:vimrcFile
      echom l:vimrcFile
    endif

  endfunction
endif
autocmd DirChanged * :call LoadProjectVimrc()

答え4

記録のために言っておきますが、最終的に私がやったことは、各プロジェクトのショートカットを作成し、を使用してプロジェクト固有の構成ファイルをセッション ファイルとして読み込むことでした-S session.vim

関連情報