最近刚开始使用linux,在为vim添加插件时选择了vundle,然而按照网上教程安装并在vim中输入PluginInstall开始添加插件时出现如题的错误。
首先,按照网上一般教程,使用
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
vundle的相关的文件都已经下载到本地的文件夹中,路径如下:
~/.vim/bundle/Vundle.vim
然后,在自己的~/.vimrc文件中也添加如下命令:
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
call vundle#end()
filetype plugin indent on
最后打开vim,在命令模式下输入PluginInstall,出现错误如题所示。分析原因,应该是rtp,即runtimepath变量未设置成功,即上述语句中
set rtp+=~/.vim/bundle/Vundle.vim
并未生效,+=符号应该是在rtp原来的值的基础上再加上某一值,也就是这条路经。网上查找原因,有的说符号~可能不被支持,要换成其他,比如换成$HOME,或是你的用户叫sb,你可以换成/home/sb等。但是在我这都没有生效。在vim命令模式下,输入echo &rtp或是echo &runtimepath,可以查看rtp的值,我(用户名为siling)的rtp是:
/home/siling/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim
74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,/home/siling/.vim/aft
er
发现确实没有想要添加的
/home/siling/.vim/bundle/Vundle.vim
这条路径。为了找出原因,我把set rtp命令中的+=改成=,也就是直接赋值,把这些路径逐步逐条往里面加,发现有一条路径比较特殊
/usr/share/vim/vim74
这条路径添加进去以后,不管怎么修改rtp,rtp都是固定的值,就是上面提到的/home/siling/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim
74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,/home/siling/.vim/aft
er
如果不填加该路径呢,可以修改rtp,但是可能会出现其他的问题,这里就不说是什么问题了,因为我也不是特别清楚,反正至少有一点我比较在意,就是不管怎么配置,vim中所有字都是普通颜色,关键字没有特殊颜色了。那到这里,我想应该是
/usr/share/vim/vim74
这条路径中有某个文件,文件设置了rtp即runtimepath的值,只要加载这个文件,rtp的值就会设定为它设定的值,不会因为我在配置文件中的命令而改变。不知道这个不能改变的原理是什么,但是既然这个路径被设置了,那就应该有某个文件里有这条设置的命令,如果找到这条命令,把我们需要的路径添加进去应该就可以了。
在命令行中输入
cd /usr/share/vim/vim74;grep -rn rtp;grep -rn runtimepath
也就是进入上述文件夹并查找其中文件中包含字符串rtp和runtimepath的地方。最后可以看到命令行中显示debian.vim文件中有一个明确的赋值语句
debian.vim:3:set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
用vim打开bebian.vim把需要添加的路径添加到这条语句中即可,这里我们要在后面添加的是
,~/.vim/bundle/Vundle.vim
其中逗号是需要的哦,如果不放心可以把~替换掉,上文提到过。到这里问题就解决了,再打开vim,命令模式下输入PluginInstall不会出现问题,而且查看rtp也是我设置的值。
然而事情并没有结束,因为每一次添加其他插件,我都需要按照如上的方法把插件需要的路径再添加一遍,否则插件不能用。比如添加CtrlP插件后,在~/.vim/bundle中就多了一个ctrlp.vim文件夹,这样我就又需要在/usr/share/vim/vim74/debian.vim中添加~/.vim/bundle/ctrlp.vim,来让vim启动时加载其中所需文件。
这一切的罪魁祸首都是rtp中的/usr/share/vim/vim74。如果去掉这句,只要在rtp中包含~/.vim/bundle/Vundle.vim,那么vundle就会把其他所有添加的插件所需要加载的路径包含进rtp,比如ctrlp插件,它会自动添加~/.vim/bundle/ctrlp.vim和~/.vim/bundle/ctrlp.vim/after。
奈何我又不太去掉/usr/share/vim/vim74,因为是vim默认就设置好的,我怕更改出现其他问题,所以我没次都在debian.vim中手动添加,如~/.vim/bundle/ctrlp.vim之类的插件所需文件夹,而~/.vim/bundle/ctrlp.vim/after之类的after文件夹我没有添加进去,实际上我并不知道这些after文件夹是干啥用的,因为实际上after并不存在啊...难道是使用vim插件的时候会自动建立使用后再删除吗?算了,不纠结了,反正不影响使用就行了。
话说如果是我这种情况的话,使用vundle还有什么意义么......我自己找到网址以后git clone到文件夹中,再添加路径不久可以了吗?使用vundle难道就图个不用找网址去下载?
可能别人的vundle都比较正常把,使用起来应该比较方便,我猜我这种情况跟不用vundle,直接自己添加插件也没有什么区别了......算了算了,不想不想了,反正解决了一个小问题还是挺开心的。
那就这样吧.......