现在为止我们已经讨论了很多可以用来提高vim效率的命令。除了自动命令分组意外,其他的命令都是单行的,并且是可以直接添加到vimrc文件里的。
在这本书的后面内容里,我们将会从一门真正的编程语言的角度来讲解vim脚本,但是在开始编写vim脚本之前,我们先来讨论一下怎么在写大段代码的时候保持思路清晰。
vim脚本的功能非常强大,但是经过这么多年,已经发展的成一个很容易让人迷乱的语言。
选项和命令往往都很简洁,也导致它们的可读性变得很差,同时为了保持兼容性,有大大增加了代码的复杂度。写一个用来帮助用户自定义vim的插件有带来了另一层的复杂性。
当你写的vim脚本行数比较多的时候就得要细心了,最好能加个注释表明具体的功能,如果有相关的材料最好说出来。
这不仅仅是为了能够让你在几个月甚至是几年后能够来维护它,如果你把在GitHub上分享你的vimrc文件的时候,它也能够帮助别人理解你的代码。
我们对于编辑和加载vimrc文件的映射能够让我们很快的来往vimrc文件里添加新的配置。但是这样也会导致配置项比较杂乱,并且无法控制和管理。
一个比较好的方式来防止上的问题就是用vim的代码折叠功能把代码行分成不同的组。如果你之前没有用过vim的代码折叠功能,现在看看下面这个很不错的的教程。
首先我们要设置vim的代码折叠功能。把下面的脚本加入到你的vimrc文件里:
augroup filetype_vim
au!
au FileType vim setlocal foldmethod=marker
augroup END
这个会告诉vim对所有的vim脚本文件用marker方法来折叠代码。在你的vimrc文件的窗口里运行:setlocal foldmethod=marker。直接重新加载vimrc文件是没有作用的,因为vim已经设置了这个文件的类型,所以文件类型的事件是不会触发的,因此自动命令也就不会执行了。不过以后你就不需要手动来设置这个选项了。
现在在自动命令的前面和后面加上一些文本,使得它看起来和下面差不多:
" Vimscript file settings ---------------------- {{{
augroup filetype_vim
au!
au FileType vim setlocal foldmethod=marker
augroup END
" }}}
返回到normal模式下,把你的光标放在任意一行,然后输入za。Vim会把从包含“{{{”和“}}}”的文本行进行折叠。再次输入za会打开代码行。
开始你可能会认为显示地加注释来表示代码折叠显得比较丑陋。我开始也是这么认为的。对于大多数文件我都认为是不对的。因为并不是每个人都用相同的编辑器,所以对于那些用非Vim编辑器来查看代码的人而言这就是增加了干扰。
vimrc文件是个特例,因为很少有不用vim的人会来读你的vimrc文件,尤其重要的一点是,当你在编写vim脚本时,你要显式地进行分组。
试着这样做一段时间,慢慢加深这个想法。
Vim允许你用大部分命令和选项的缩写词。例如,下面的两个命令的功能是一样的:
:setlocal wrap
:setl wrap
不过我不建议你在你的vimrc文件和插件的代码里用他们,因为vim脚本本身就足够简洁,而且还比较晦涩——运用缩写词只会让它变得更加难以阅读。即是你知道一个命令的缩写的意义,但是别人也会许不知道。
不过说回来,对于在编码时手动输入的命令,缩写词是很有用的,因为它们可以提高输入效率。因为一旦你输入了换行符,别人是不会再看到的,所以能不多按键盘就尽量不多按。