黑暗时代的插件结构

我们需要讨论的第一件事就是要如何组织插件的结构。 这在过去是非常混乱的,但是现在有一个工具可以使安装 Vim 插件的过程变得非常非常的健全。

我们需要先复习下基本结构,然后再继续讨论如何恢复健全。

基本结构

纯净版的 Vim 支持把插件拆分成多个文件。 你可以在 ~/.vim 目录下创建很多不同的文件夹来表述各种各样的事情。

现在,我们来聊聊最重要的一些文件夹,但是不必太紧张。 我们会在创建 Potion 插件时,一个一个的来复习它们。

在我们继续之前,需要对一些词汇进行说明。

我曾经用“Vimscript 中可以用来处理大堆相关工作的一大部分内容”来表示“插件”这个词。 而 Vim 对于“插件”有一个更明确的定义,那就是“在 ~/.vim/plugin/ 中的文件”。

大部分时间,我都会使用第一种定义。如果要用第二种,我会劲量指明。

~/.vim/colors/

~/.vim/colors/ 中的文件被看作是配色方案。 例如:如果运行:color mycolors, Vim 会寻找 ~/.vim/colors/mycolors.vim 文件,并运行它。 这个文件需要包含所有生成配色方案所需要的 Vimscript 命令。

我们不会在本书中讲到配色方案。如果你想自己创建一个,那应该复制一个已有的方案,然后进行修改。 记住,:help 是个好帮手。

~/.vim/plugin/

~/.vim/plugin/ 中的文件会在每次 Vim 启动的时候运行一次。 这些文件应该要包含启动 Vim 时需要载入的代码。

~/.vim/ftdetect/

~/.vim/ftdetect/ 中的任何文件也会在每次 Vim 启动的时候运行。

ftdetect 代表“检测文件类型”。 这个目录中的文件应该设置些自动命令来检测并设置文件的 filetype,而没有其他别的东西。 这意味着最多只有一两行代码。

~/.vim/ftplugin/

~/.vim/ftplugin/ 中的文件就不同了。

这些文件的名字是有意义的! 当 Vim 给缓冲区设置一个 filetype 的值时,它就会去 ~/.vim/ftplugin/ 中寻找一个匹配的文件。 例如:如果运行 set filetype=derp,Vim 会寻找 ~/.vim/ftplugin/derp.vim 文件。 如果文件存在,则运行它。

Vim 也支持 ~/.vim/ftplugin/ 中的文件夹。 继续上面的例子:set filetype=derp 也会让 Vim 运行所有 ~/.vim/ftplugin/derp/ 中的 *.vim 文件。 这让你可以把插件的 ftplugin 文件按逻辑拆分为组。

因为这些文件会在每次设置 filetype 时运行,所以它们必须只设置缓冲区的本地选项! 如果设置了全局选项,它们会覆盖所有已经打开了的缓冲区!

~/.vim/indent/

~/.vim/indent/ 中的文件很像 ftplugin 文件。它们也是基于文件名来载入。

indent 文件应该为各自类型的文件设置缩进相关的选项,同样,这些选项也应该是缓冲区本地的。

当然,你可以直接把这些代码放到 ftplugin 文件中,但最好还是把它们分开,这样其他的 Vim 用户才能明白你在做什么。 这只是一个约定,但是作为一个考虑周到的插件作者,请遵从它。

~/.vim/compiler/

~/.vim/compiler/ 中的文件和 indent 文件一样。它们应该基于各自的名字来为当前缓冲区设置编译器相关的选项。

现在不用担心“编辑器相关的选项”是什么意思。我们会在以后讲到它。

~/.vim/after/

~/.vim/after/ 中的文件有点非常规。 它们会在每次 Vim 启动的时候被载入,但是是在 ~/.vim/plugin/ 文件之后

这允许你复写 Vim 的内部文件。 实际上,你很少用得上它,所以不用担心,除非发现“Vim 自动设置了选项 x,但是我想设为其他的”。

~/.vim/autoload/

~/.vim/autoload/ 目录是一个非常重要的骇客部分。它看上去非常复杂,但实际并不是。

简单的说就是:autoload 是一种延迟载入插件代码的方法,它会直到真正需要时才被载入。 在之后,当我们利用它来重构插件代码时,会讲到更多的细节。

~/.vim/doc/

最后,~/.vim/doc 目录是可以为插件添加文档的地方。 Vim 非常重视文档(所有以前运行过的 :help 命令都可以为证),所以为你的插件写文档是非常重要的。

练习

重新阅读本章节。我并没有开玩笑。必须确保理解了(用最简单粗暴的方式)刚刚讲到的每个目录的作用。

附加题,找到一些你用过的 Vim 插件,并看看他们是如何组织文件结构的。

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