Vim 入门教程 Vimscript 负责任的编码

2024-02-25 开发教程 Vim 入门教程 匿名 3

到目前为止我们已经介绍了一堆Vim命令,这可以让你可以快速自定义Vim。除了自动命令组外其他的命令都是单行的命令,你可以不费吹灰之力就把它们添加到你的~/.vimrc文件中。

这本书的下一部分我们会开始专注于Vim脚本编程,将其当作一个真正的编程语言对待,不过在此之前,我会先讲一些在编写大量的Vim脚本时需要注意的东西。

注释

Vim脚本非常强大,但对于那些想进入这个领域的程序员而言,在最近几年它似乎逐渐变得像一个弯弯曲曲的迷宫,让进入的人找不到归路。

Vim的选项和命令经常会比较简短生硬,并且难于阅读,另外处理兼容性问题也会增加代码的复杂度。编写一个插件并且允许用户自定义又会让复杂度更进一级。

在编写大量Vim脚本时要保持防御意识。要养成习惯添加注释说明某段代码是干什么的,如果有一个相关的帮助主题(help topic),最好在注释中说明!

这不仅会给你以后的维护带来方便,而且如果你将你的~/.vimrc文件分享到Bitbucket或者GitHub(强烈推荐你这么做),这些注释也会帮助其他的人理解你的脚本。

分组

之前创建的映射可以让我们在使用Vim的同时方便快捷地编辑和加载~/.vimrc。不幸的是这会导致~/.vimrc中的代码快速增长以至失去控制,并且变得难于阅读浏览。

我们用于对付这种情况的方法是使用Vim的代码折叠功能,将多行代码组织起来的作为一个部分然后对这部分的代码进行折叠。如果你从来没有用过Vim的折叠功能,那么你现在应该尽快去瞄一瞄。很多人(包括我自己)都认为在日常编码工作中代码折叠是不可或缺的。

首先我们需要为Vim脚本文件设置折叠。在你的~/.vimrc文件中添加下面几行:

augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END

这会告诉Vim对任何Vim脚本文件使用marker折叠方法。

现在在显示~/.vimrc文件的窗口中执行:setlocal foldmethod=marker。如果你不执行这个命令,你会发现加载~/.vimrc文件后没什么效果,这是因为Vim已经为这个文件设置了文件类型(FileType),而自动命令只会在设置文件类型的时候执行。这让你以后不需要手动来做这个事情。

现在在自动命令组开始和结束的地方添加两行,像下面这样:

" Vimscript file settings ---------------------- {{{
augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END
" }}}

切换到常用模式,将光标放到这些文字中的任意一行,然后敲击za。Vim会折叠从包含{{{的行到包含}}}的行之间的所有行。再敲击za会展开所有这些行。

刚开始你可能会觉得为了代码折叠而对源代码进行注释会有些不合理,我刚开始也这么想。对于大多数文件我现在仍然觉得这种做法并并不合适。因为不是所有人都使用相同的编辑器,所以在代码中添加的折叠注释对于那些不用Vim的人而言就像是噪音。

不过Vim脚本文件比较特殊,因为一个不用Vim的人不太可能会读你的代码,并且最重要的是如果不对代码进行分组处理,写着写着你就不知道写到哪里了,严重点可能会经脉尽断,吐血而亡。

先自己尝试尝试吧,说不定你会逐渐喜欢上它。

简短的名称(Short Names)

对于大多数命令和选项,Vim支持使用它们的缩写。例如,下面的两个命令做的事情完全一样:

:setlocal wrap
:setl wrap

我_强烈_提醒你不要在你的~/.vimrc或者是你编写的插件中使用这些缩写。Vim脚本对于初学者而言本来就已经够晦涩难懂了;从长远来看使用缩写只会使得它更难于阅读。即使_你_知道某个缩写的意思,其他人未必读得懂。

换句话说,缩写只在编码的过程中手动执行命令的时候会很有用。在你按了回车键以后,就没人会看到你输入什么了,这样你也没必要输入更多的字符。

练习

检查你的~/.vimrc文件,将所有相关的行组织起来。你可以这么开头:“基本设置(Basic Settings)“,”文件类型相关设置(FileType-specific settings)”,“映射(Mappings)”,和“状态条(Status Line)”。然后在每个部分添加折叠标记和标题。

想想怎么让Vim在第一次打开~/.vimrc文件的时候自动折叠所有设置了折叠注释的行。阅读:help foldlevelstart你会知道怎么搞。

检查你的~/.vimrc文件,把所有的命令和选项的缩写改成全称。

检查你的~/.vimrc文件,确保里面没有什么敏感信息。然后创建一个git或者Mercurial仓库,再将~/.vimrc文件放到里面,然后将这个文件链接到~/.vimrc

提交你刚才创建的仓库,并把它放到Bitbucket或者GitHub上,这样其他的人都可以看到和学习它。记住要经常提交和推送到仓库中,这样你所做的修改也会被记录下来。

如果你不只在一个机器上使用Vim,那你就可以克隆那个仓库,然后像之前一样将这个文件链接到~/.vimrc文件。这样你就可以在所有的机器上都使用同样的Vim配置了。