如何讓 Vim 自動從目前目錄載入 .vimrc 配置?

如何讓 Vim 自動從目前目錄載入 .vimrc 配置?

我有一些專案需要不同的命令來運行、建置和測試,因此我在每個專案目錄中放置了一個 .vimrc 文件,該文件定義了一些 F 按鈕的映射。在 vim 幫助文件中它說:

'exrc' 'ex' 布林值(預設為關閉)
                        全球的
                        {Vi 中沒有}
        允許讀取目前檔案中的 .vimrc、.exrc 和 .gvimrc
        目錄。

所以我啟用了該選項,但是當我:cd進入目錄時,未載入 .vimrc 檔案。如果我寫的:so .\.vimrc話它加載得很好。為什麼不自動加載?


我正在使用適用於 Windows 的 gVim 7.3 x64。

答案1

如果設定了 'exrc',則在目前目錄中搜尋名為 的文件_vimrc.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-event目錄已更改您可以使用它來評估您的特定項目.vimrc。以下是有關何時觸發此事件的更多詳細資訊:

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

工作範例

我不是 vim 腳本的專家,但我建立了以下函數,一旦我進入專案資料夾.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.

相關內容