无法让Pathogen在Vim中工作

6

我知道这个问题已经有多篇文章讨论了,但是我尝试过很多次都没能让Vim的这个简单部分工作。我想让pathogen插件与Vim一起工作。需要说明的是,我正在Windows系统上工作。我已经通过github下载了pathogen,并创建了目录.vim和子目录autoloadbundle。我的.vimrc是使用mkvimrc创建的默认文件,其中包含:

call pathogen#infect()
syntax on
filetype plugin indent on

加入到底部。针对我看到的其他帖子作出回应:

:set cp? = nocompatible

我猜测其中一个问题是当我运行:scriptnames后,我没有看到.vim目录。我只看到了Vim\.vimrcvim73目录。我该如何解决这个问题呢?我已经尝试了很长时间,如果这对其他人来说很显然,请见谅。


顺便提一下,你的 :set 语法是错误的。等号周围不能有空格,并且去掉 ?;它只用于显示当前值。 - Ingo Karkat
3个回答

9
在Windows上,本地用户配置的默认位置是$HOME/vimfiles。如果您的文件在$HOME/.vim中,则需要将它们移动到vimfiles或在您的.vimrc中将.vim添加到您的runtimepath中:
set runtimepath+=~/.vim

此外,如果 Pathogen 位于 bundle 的子目录中,则需要从那里显式运行它,因为默认情况下 Vim 只会查找 ~/.vim/。将以下代码放入您的 .vimrc 中,并在 pathogen#infect 调用之前使用:
```vimscript execute pathogen#infect('bundle/{}', '~/.vim/bundle/{}') ```
runtime bundle/pathogen/autoload/pathogen.vim

1
没错,我把 .vim 目录移动到了 vimfiles 中,现在一切都正常了。谢谢你,这让我感到十分困扰。 - Liam
没问题。当在不同的平台之间移动文件时,这经常让我感到困惑。我希望 Vim 的默认设置是一致的! - Prince Goulash

1
对我来说,解决方案是重新下载 pathogen.vim,因为它在重定向时未能成功下载。tpope的github上指定的URL有以下步骤:
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

当下载失败时,你会发现pathogen.vim的内容是一个302重定向页面。只需从重定向URL中下载即可,例如:
wget -N -O ~/.vim/autoload/pathogen.vim https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim

0

使用禁用插件的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提供的答案完全错误

  1. 第一个错误是他将~/.vim附加到rtp,而应该在其前面添加;
  2. 第二个错误是他没有附加~/.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的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接