如何让 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 版本中,有一个名为目录已更改您可以用它来评估您的项目特定情况.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

相关内容