我有两个不同的项目(让我们称它们为 projA 和 projB),它们有自己的 Vim 插件。
每个插件文件夹都有一个 ftdetect、ftplugin、plugin 和 syntax 子文件夹,每个文件夹都处理相同类型的文件(.cpp、.html 等)。
如果我加载了两组插件,那么我想要的任何东西都无法正常工作,所以我需要一种方法来只加载与我正在处理的项目相对应的插件。
我的想法是通过检测我当前的工作目录getcwd()
,然后只加载相关插件,但我不知道如何手动加载单个插件。
我目前正在使用 Vundle 来管理我的其余插件。
像 Vundle 和 Pathogen 这样的包管理器将每个插件分成自己的子树,并将所有这些路径连接到'runtimepath'
选项中,以便 Vim 考虑所有这些。这使得禁用插件变得特别简单:只需防止将插件的子树包含到'runtimepath'
.
Vundle~/.vimrc
通过Bundle 'foo/bar'
命令引用插件,所以你只需要在它周围放置一个条件:
if getcwd() ==# '/work/cpp'
Bundle example/cpp
else
Bundle example/other
endif
Run Code Online (Sandbox Code Playgroud)
对于传统的单一~/.vim/
配置层次结构,您必须通过设置规范g:loaded_PluginName
包含保护来抑制插件加载。这需要插件的支持,并且通常不适用于 ftplugins、缩进和语法脚本。
vim-plug
插件vim-plug
管理器支持有条件加载插件。
这直接来自他们的自述文件:
" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
Run Code Online (Sandbox Code Playgroud)