Vim最基本的插件布局可以让你在不同的地方放不同的文件来自定义你自己的Vim,但是当你使用别人的差距的时候就会感觉一团糟了。
在过去,当你想用其他人写的一个插件时,你需要下载所有的文件,并且你需要把它们一个一个地放到正确的文件夹里。你也可以用zip或者tar命令来帮你完成这个工作。
这种方法有几个很明显的问题:
如果你要更新一个插件怎么办呢?你可以覆盖旧的文件,但是你怎么知道作者删除了哪些文件,并且你需要手动去删除它。
如果两个插件有一个同名的文件怎么办呢(例如utils.vim或者其他常用的名字)?有些情况下你可以手动去编辑它,但是如果文件是在autoload或者其他的文件名比较关键的目录里的时候,那么你就需要自己修改插件的代码了。这样是很不好的。
人们想了很多巧妙的方法来想使得上面的问题变得简单,例如Vimballs。幸运的是,我们再也不需要使用这些恶心的方法了。Tim Pope创建了一个很有用的插件,这个插件使得多插件的管理变得十分轻松,它只需要插件的作者把它的插件布局正常即可。
我们先来看看Pathogen是如何工作的,已经为了保持兼容我们该做些什么。
当vim查找一个特定目录(例如syntax/)下的文件时,它不只是查找一个地方。就像Linux/Unix/BSD系统有PATH变量一样,Vim有runtimepath选项来告诉它去哪儿寻找要加载的文件。
在你的桌面创建一个color文件夹,在这个目录里创建一个名叫mycolor.vim的文件(在这个例子里你可以保持这个文件为空即可)。打开vim运行下面的命令:
:color mycolor
Vim会报错,因为它不知道是要到你的桌面去寻找对应的文件。现在运行下面的命令:
:set runtimepath=/Users/sjl/Desktop
你需要修改上面的路径,让它对应到你的桌面。再试试上面的命令。
这次Vim不会保存了,因为它能够找得到mycolor.vim文件。因为这个文件是空的,所以它实际上什么都没有做,不过我们知道vim找到它了,因为Vim这次没有报错。
Pathogen插件会在打开Vim的时候添加路径到runtimepath变量里。所有在~/.vim/bundle/目录下的文件都会被加到runtimepath里。
也就是说,所有在bundle/目录下的文件夹,都需要包含部分或者所有的标准vim插件目录,例如colors/和snytax/。Vim然后就可以从这些文件夹里加载所需的文件了,这样就只需要把插件的文件统一放在一个目录下,操作起来更加简单了。
当我们写Potion插件的时候,我们希望用户能够通过Pathogen来安装它。实现这个目的的方式很简单:我们只需要把文件放到插件资源库下对应的目录里即可。
我们的插件资源库最终的结构如下所示:
potion/
README
LICENSE
docs/
potion.txt
ftdetect/
potion.vim
ftplugin/
potion.vim
syntax/
potion.vim
...etc...
我们可以把上面的内容放到GitHub或者Bitbucket上,这样的话,用户就可以直接把它拷贝到bundle/目录下,然后就可以直接使用了。