手动和有条件地为 Vim 加载插件

ske*_*key 2 vim

我有两个不同的项目(让我们称它们为 projA 和 projB),它们有自己的 Vim 插件。

每个插件文件夹都有一个 ftdetect、ftplugin、plugin 和 syntax 子文件夹,每个文件夹都处理相同类型的文件(.cpp、.html 等)。

如果我加载了两组插件,那么我想要的任何东西都无法正常工作,所以我需要一种方法来只加载与我正在处理的项目相对应的插件。

我的想法是通过检测我当前的工作目录getcwd(),然后只加载相关插件,但我不知道如何手动加载单个插件。

我目前正在使用 Vundle 来管理我的其余插件。

Ing*_*kat 5

像 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、缩进和语法脚本。


Mat*_*aun 5

vim-plug

插件vim-plug管理器支持有条件加载插件。

这直接来自他们的自述文件:

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
Run Code Online (Sandbox Code Playgroud)