使用禁用的插件打开 Vim 并输入 :set rtp - 注意:
- 如果您使用的是 Unix,则默认情况下:第一个是
~/.vim,最后一个是 ~/.vim/after;
- 如果您使用的是 Windows,则默认情况下:第一个是
~/vimfiles,最后一个是 ~/vimfiles/after。
这是一种 Vim 约定。 after 目录用于强制覆盖 Vim 的默认值或插件的设置,这有时很重要。这就是为什么它们是rtp 中的最后一个。
Pathogen 实际上解析了当前rtp 变量的结构,并使用它将插件路径正确地注入rtp。比如看我的rtp:
runtimepath=
~/.vim,
~\.vim\plugins\NERDCommenter,
~\.vim\plugins\NERDTree,
~\.vim\plugins\SameSyntaxMotion,
~\.vim\plugins\Tabular,
~\.vim\plugins\UltiSnips,
~\.vim\plugins\c.vim,
~\.vim\plugins\clang_complete,
~\.vim\plugins\CountJump,
~\.vim\plugins\delimitMate,
~\.vim\plugins\fswitch,
~\.vim\plugins\matchit,
~\.vim\plugins\matlab,
~\.vim\plugins\neocomplcache,
~\.vim\plugins\protodef,
~\.vim\plugins\python-syntax,
~\.vim\plugins\solarized,
~\.vim\plugins\syntastic,
~\.vim\plugins\vim-creole,
~\.vim\plugins\vim-latex,
~\.vim\plugins\vim-markdown,
~\.vim\plugins\vim-python-pep8-indent,
~/vimfiles,
D:\Applications\Vim/vimfiles,
D:\Applications\Vim,
D:\Applications\Vim/vimfiles/after,
~/vimfiles/after,
~\.vim\plugins\Tabular\after,
~\.vim\plugins\UltiSnips\after,
~\.vim\plugins\vim-markdown\after,
~/.vim/after
注意病原体如何注入路径。它检测到有几个插件有after 目录并将它们放在~/.vim/after 之前 - 所以最后一个词总是我的。
要实现这种病原体需要一对~/.vim 和~/.vim/after 或~/vimfiles 和~/vimfiles/after 甚至~/stuff 和~/stuff/after(虽然不确定最后一种情况)作为注入插件的锚' 路径顺序正确。
如果缺少这对中的任何目录,那么您将对病原体有一些令人讨厌的经历(就像我前一段时间所做的那样,直到我发现了所有上述内容并浏览了病原体源代码)-因为路径将无法正确注射。
现在你可以看到Prince Goulash提供的答案是完全错误:
- 第一个错误是他将
~/.vim 附加到rtp 而
他应该把它放在前面;
- 第二个错误是他没有附加
~/.vim/after。
正确的解决方案如下所示。如果您必须在包括 Windows 在内的不同平台上工作,您应该将其添加到您的 .vimrc 中(我也将其保存在我的内部 - 您可以从我的 rtp 示例中推断出来):
if has('win32') || has('win64')
set runtimepath^=~/.vim
set runtimepath+=~/.vim/after
endif
此 sn-p 将确保跨平台的一致性。即使在 Windows 中,您现在也可以使用类 Unix 目录 .vim 而忘记 vimfiles 废话 - 这是 IMO 丑陋和可怕的。
然后你打电话:
call pathogen#infect('plugins') " or wherever your plugins reside
call pathogen#helptags() " optional, but really cool
注意: 'plugins' 表示~/.vim/plugins 目录,因此它是~/.vim 的相对目录。