在 vim with pathogen 中,如何检查插件是否会被加载?

In vim with pathogen, how can I check if a plugin will be loaded?

我在 vim 中使用 Pathogen 来管理我的插件,并且我的 vimrc 中有一个部分,我想 运行 仅当某个插件不可用时't installed/won 未加载。例如

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 中 and/or 检查目录 .vim/bundle/dwm.vim 是否存在。

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

pathogen 的全部意义在于让管理我的 runtimepath 更容易,因此一个优雅的解决方案是搜索此路径。但是搜索帮助,病原体来源,google,这里显示没有简单的方法可以做到这一点。我可以在 vim/pathogen 本地执行此操作吗?有没有插件可以帮我做这件事?我根本不应该这样做吗,因为检查失败的情况相当极端,只要我正确管理我的插件就不会发生?

pathogen#infect()之后添加:

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

大多数插件都有一个(重新)包含保护。通常命名为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()