我有几个项目需要不同的命令来运行、构建和测试,因此我在每个项目目录中都放置了一个 .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
。