前言
这是一篇有关 Vim 脚本语言的入门与进阶教程。是“指北”,不是“指南”,所以如果不慎 指错了路,切勿见怪。不过要相信地球是圆的,绕了一圈之后,希望还是能找对目标的。
初学者如果第一章看不懂,建议直接看第二章;如果第二章看不懂,建议直接看第三章; 如果第三章也看不懂,建议直接放弃治疗,汝须先培养对 vim 的信仰习惯。
以下……开始严肃话题。
正名约定
Vim 是上古神器之一,且能历久弥新,与时俱进。随着 Vim 的发展,Vim 的脚本也逐渐 发展壮大,支持的功能与特性越来越丰富,俨然成为一种新的或老的实用脚本语言。然而 这语言的名字,网上的称谓似乎还有点五花八门。
为了行文统一与方便,在这里我采用“VimL”(Vim Language 缩写)来表示该脚本语言,用“ Vim” 表示编辑器;而小写的 “vim” 则是指系统中可执行的编辑器程序,若从“VimL”角度 看,也算是它的解释器程序;然后“vim script”就是存放“VimL”代码且可用“vim”解释运 行它的文本文件。
目标假设
本教程针对的目标群体,假定是有使用 Vim 的基础及一定的编程基础。尽管我尽量从基 本概念讲起,但一些最基础的东西怕无从再细致了。然后最重要的是要热爱 Vim ,并且 有折腾的精神来打造或调教自己的 Vim。
其实,不管是使用 Vim 还是 VimL,最好的资源都是 Vim 的内置帮助文档(:help
)。 外部教程都不免有所侧重,较适于学习阶段的引领者。
本教程依据的 Vim 版本是 8.1
,系统环境 Linux。但除了一些新特性,应该也适用 Vim7 以下版本。同时由于 Vim 本身是跨平台的,VimL 自然也与操作系统无关。虽然无 法一一验证,但在一些重要的差异处,尽量在文中指出。
VimL 的优缺点
作为一种语言,首先指出 VimL 的缺点一是只能在 Vim 环境下运行,二是运行速度有点 慢。但是,对于热衷 Vim 的程序猿,每天的编码工作都在 Vim 环境下,VimL 的编程方 式与 Vim 的操作方式无间密合,应该算是个优势。
另外,程序的运行速度都是相对的。所有的动态脚本语言,相对静态的编译语言,都很慢 。但这不要紧,只要完成大部分工作能足够快,脚本的简单便捷性就能体现出来了。VimL 同样具有脚本语言这个共性。
用 Vim 编写 VimL 代码,另有个天然的优势,就是编辑器,解释器,与文档手册一体化 ,同时仍然保持了 Vim 的小巧,不像静态语言的IDE那么笨重。
编程思想基本是独立于语言的,大多数语言都是相通的。现代的高级脚本语言更是几乎都 能提供差不多的功能。(而且,据说只要是“图灵完备”的语言,理论上都能做任何事)。 所以,经常使用 Vim 的程序猿,如果想多学一门脚本语言,那 VimL 是个不坏的选择。
文本约定
本教程拟用 .md
文件书写,章用一级标题,节用二级标题,每节至少一个文件。初稿 不一定严格按目录大纲的顺序书写,并且在此过程中或有增删调整。
带星号 *
的章节,表示略有艰深晦涩的内容,可以选择性略过。
关于示例代码块,:
开始的行表示 Vim 的命令行(也叫 ex 命令),$
开始的行表 示从 shell 运行的命令行。较短的示例代码,可以直接输入或粘贴入 vim 的命令行,较 长的示例代码,建议保存 .vim
文件,然后 :source
。
本书正文共十章,可粗略分为三部分。第 1-3 章为基础篇,第 4-7 章为中级篇,第 8-10 为高级篇。在行文组织上尽量循序渐进,建议按顺序阅读。文中经常用提示用 :help
命令查阅相关帮助主题,此后忘记细节时可随时查询。