新的希望:Pathogen 的插件结构

如果你只是按照 Vim 的基本插件结构来添加一些插件文件,并自定义自己的 Vim,那是完全没问题的, 但是如果想使用其他人写的插件,那就会变得一团糟。

在过去,当你想使用其他人写的插件时,就需要先下载这些文件,然后把它们一一放入相应的目录中。 也可以使用 ziptar 命令来做这些。

这种方法有些需要注意的问题:

人们提出过很多方案来简化它,比如 Vimballs。幸运的是我们不再需要忍受这些糟糕的方案了。 Tim Pope 创造了伟大的 Pathogen 插件,它能轻松得管理多个插件, 并且和其他插件作者一样通过一种健全的方式来组织插件结构。

让我们一起来看看 Pathogen 是如何工作的,以及要怎样使我们的插件能兼容它。

运行时路径

当 Vim 在某个目录,比如 syntax/ 中寻找文件时,它并不只是在单一的一个地方找。 就像 Linux/Unix/BSD 系统中的 PATH 一样,Vim 也有 runtimepath 的设置,这会告诉它去哪寻找需要载入的文件。

在桌面创建 colors 目录。并在目录中创建名为 mycolor.vim 的文件 (在这个例子中你可以保留文件空白)。打开 Vim 并运行命令:

:color mycolor

Vim 会显示一个错误,因为它不会在你的桌面去寻找文件。现在运行命令:

:set runtimepath=/Users/sjl/Desktop

当然,你需要把路径改成你桌面的路径。现在再试试 color 命令:

:color mycolor

这次 Vim 没有再报错,因为它找到了 mycolor.vim 文件。 由于这个文件是空的,它实际上并没有任何事,但我们知道它被找到了,因为没有报错。

Pathogen

Pathogen 插件能在 Vim 载入时自动把路径添加到 runtimepath 中。 任何 ~/.vim/bundle/ 中的目录都会被添加到 runtimepath 中。

这意味着每个 bundle/ 中的目录都应该包含某些或者全部标准的 Vim 插件目录,例如 colors/syntax/。 Vim 现在可以载入所有这些目录中的文件,这让我们可以更轻松得把每个插件的文件都留在自己的目录中。

这样更新插件就非常轻松了。你可以直接删除旧插件的整个目录,并替换为新的版本。 如果你让 ~/.vim 目录处于版本控制下(你应该这样做),那就可以用 Mercurial 的 subrepos 或者 Git 的 submodules 来直接把插件的仓库签出到 ~/.vim/bundle 中,以后要更新只需要用 hg pull; hg update 或者 git pull origin master

兼容 Pathogen

如果想让用户可以通过 Pathogen 来使用我们的 Potion 插件要怎么办。 要做到这点很简单:我们只需要把文件放进仓库恰当的目录中!

我们的插件仓库最终看上去像这样:

potion/
    README
    LICENSE
    doc/
        potion.txt
    ftdetect/
        potion.vim
    ftplugin/
        potion.vim
    syntax/
        potion.vim
    ... etc ...

我们可以把这些放到 GitHub 或者 Bitbucket 上,用户就可以直接克隆到 bundle/ 中,然后一切都会正常运行!

练习

如果没有安装过 Pathogen 那现在安装。

为你的插件创建一个名为 potion 的 Mercurial 或 Git 仓库。 可以把它放在任何你喜欢的位置,然后软链到 ~/.vim/bundle/potion/ 或者直接放到 ~/.vim/bundle/potion/ 中。

在仓库中创建 READMELICENSE 文件,然后提交。

把仓库推送到 Bitbucket 或 GitHub。

阅读 :help runtimepath

原文地址:http://learnvimscriptthehardway.stevelosh.com/chapters/43.html