旧社会下的插件配置方式
最后更新于:2022-04-01 21:05:38
我们需要讲到的第一件事是如何配置我们的插件。在过去,这会是一次混乱的折腾, 但现在我们有一个工具可以非常方便地安装Vim插件。
我们需要先过一下基本的配置方式,然后我们会讲到如何省下麻烦。
## 基本配置方式
Vim支持把插件分割成多个文件。你可以在`~/.vim`下创建许多不同种类的文件夹来放置不同的内容。
我们现在将讲述其中最为重要的几个文件夹,但不会在上面花费太多时间。 当我们创造Potion插件时,我们会逐一认识它们的。
在我们继续前进之前,需要先确定一些用词规范。
我将用"插件"表示一大堆做一系列相关事情的Vimscript代码。 在Vim里,"插件(plugin)"有一个更专业的定义,它表示"`~/.vim/plugins/`下的一个文件"。
在大多数时间里,我将使用第一个定义。如果指的是第二个定义,我会特意指明。
## ~/.vim/colors/
Vim将会查找`~/.vim/colors/mycolors.vim`并执行它。 这个文件应该包括生成你的配色方案所需的一切Vimscript命令。
本书中,我们不会谈到配色方案。如果想创造属于自己的配色方案,你应该从一个现存的配色方案上改造出来。 记住,`:help`将与你常在。
## ~/.vim/plugin/
`~/.vim/plugin/`下的文件将在_每次_Vim启动的时候执行。 这里的文件包括那些无论何时,在启动Vim之后你就想加载的代码。
## ~/.vim/ftdetect/
`~/.vim/ftdetect/`下的文件在每次你启动Vim的时候_也会_执行。
`ftdetect`是"filetype detection"的缩写。 这里的文件_仅仅_负责启动检测和设置文件的`filetype`类型的自动命令。 这意味着它们一般不会超过一两行。
## ~/.vim/ftplugin/
`~/.vim/ftplugin/`下的文件则各不相同。
一切皆取决于它的名字!当Vim把一个缓冲区的`filetype`设置成某个值时, 它会去查找`~/.vim/ftplugin/`下对应的文件。 比如:如果你执行`set filetype=derp`,Vim将查找`~/.vim/ftplugin/derp.vim`。 一旦文件存在,Vim将执行它。
Vim也支持在`~/.vim/ftplugin/`下放置文件夹。 再以我们刚才的例子为例:`set filetype=derp`将告诉Vim去执行`~/.vim/ftplugin/derp/`下的全部`*.vim`文件。 这使得你可以按代码逻辑分割在`ftplugin`下的文件。
因为每次在一个缓冲区中执行`filetype`时都会执行这些文件,所以它们_只能_设置buffer-local选项! 如果在它们中设置了全局选项,所有打开的缓冲区的设置都会遭到覆盖!
## ~/.vim/indent/
`~/.vim/indent/`下的文件类似于`ftplugin`下的文件。加载时也是只加载名字对应的文件。
`indent`文件应该设置跟对应文件类型相关的缩进,而且这些设置应该是buffer-local的。
是的,你当然可以把这些代码也一并放入`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插件看看它们如何组织代码文件。
';