在病毒与vim中,我如何检查插件是否会被加载?

问题描述:

我在vim中使用病原体来管理我的插件,并且我在vimrc中有一个部分,我希望只在某个插件未安装/不会加载的情况下运行。例如。在病毒与vim中,我如何检查插件是否会被加载?

if(dwm.vim not in use) 
    nnoremap <C-h> <C-w>h 
    nnoremap <C-j> <C-w>j 
    nnoremap <C-k> <C-w>k 
    nnoremap <C-l> <C-w>l 
endif 

,将可能在大多数情况下这两个选项是检查dwm.vim是g:pathogen_disabled和/或检查,如果目录.vim/bundle/dwm.vim存在。

但是,这些检查似乎有些脆弱。例如,如果我没有dwm检查dwm.vim是否被禁用病原体是不够的,并且如果由于某种原因dwm.vim处于某个非标准位置,仍然进入runtimepath,路径检查将不会工作。

病原体的关键在于使我的runtimepath更容易管理,所以一个优雅的解决方案就是搜索这条路径。但寻找帮助,病原体来源,谷歌,并在这里透露没有简单的方法来做到这一点。我可以在vim/pathogen本身做到这一点吗?有没有一个插件可以帮我做到这一点?我应该不这样做,因为检查失败的情况是相当严重的,并且只要我正确管理我的插件就不会发生这种情况。

pathogen#infect()后补充一点:

if globpath(&runtimepath, 'dwm.vim', 1) !=# '' 
    " dwm.vim caught in the act 
endif 
+0

完美的感谢。正是我想要的,并且推广到我想搜索'rtp'而不是搜索插件的情况。 – Danwizard208

大多数插件有一个(重)列入后卫。通常命名为g:loaded_pluginname。使用这个和以后的目录,你可以有条件地加载你的映射。

放入~/.vim/after/plugin/dwm.vim如下:

if !get(g:, 'loaded_dwm', 0) 
    nnoremap <C-j> <C-w>j 
    nnoremap <C-k> <C-w>k 
    nnoremap <C-l> <C-w>l 
endif 

如需更多帮助,请参见:

:h write-plugin 
:h after-directory 
:h get() 
+0

这很好,但依赖于定义包含警卫的插件。 – Danwizard208

+0

dwm.vim从正常方案中解脱出来,并使用'g:dwm_version'作为其包含守卫。 –