使用禁用插件的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
之前,以便最后一个词始终是我的。
为实现这一点,Pathogen需要一对~/.vim
和~/.vim/after
或~/vimfiles
和~/vimfiles/after
甚至~/stuff
和~/stuff/after
(不确定最后一种情况)作为锚点,以正确顺序注入插件的路径。
如果此对中的任何一个目录缺失,则将遇到一些令人讨厌的路径问题(就像我以前曾经遇到过的那样,直到我发现了所有上述内容并查看了Pathogen源代码)——因为路径将无法正确注入。
现在您可以看到,Prince Goulash
提供的答案完全错误:
- 第一个错误是他将
~/.vim
附加到rtp
,而应该在其前面添加;
- 第二个错误是他没有附加
~/.vim/after
。
正确的解决方案如下。如果您需要在包括Windows在内的不同平台上工作,您应该将以下内容添加到您的.vimrc
中(我也将此保存在我的文件中 - 您可以从我的rtp
示例中推断出它):
if has('win32') || has('win64')
set runtimepath^=~/.vim
set runtimepath+=~/.vim/after
endif
这段代码片段将确保跨平台的一致性。现在,即使在Windows中,您也可以使用类Unix的目录
.vim
,并忘记那些我认为丑陋可怕的
vimfiles
东西。
之后,您可以调用:
call pathogen#infect('plugins') " or wherever your plugins reside
call pathogen#helptags() " optional, but really cool
注意:'plugins'
表示~/.vim/plugins
目录,因此它是相对于~/.vim
的。
:set
语法是错误的。等号周围不能有空格,并且去掉?
;它只用于显示当前值。 - Ingo Karkat