前言

    这是一篇有关 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 自然也与操作系统无关。虽然无 法一一验证,但在一些重要的差异处,尽量在文中指出。

    最新的 Vim 版本是 9,主要是大幅提升性能,同时也改变了之前版本的部分用法,整体 向现代的通用脚本语言靠近。本书后续计划加入 Vim 9 的新语法,但因本书讲的更多是 通用的基础且 Vim 9 还在不断发展,待时机成熟后再更新也不迟。

    VimL 的优缺点

    作为一种语言,首先指出 VimL 的缺点一是只能在 Vim 环境下运行,二是运行速度有点 慢。但是,对于热衷 Vim 的程序猿,每天的编码工作都在 Vim 环境下,VimL 的编程方 式与 Vim 的操作方式无间密合,应该算是个优势。

    另外,程序的运行速度都是相对的。所有的动态脚本语言,相对静态的编译语言,都很慢 。但这不要紧,只要完成大部分工作能足够快,脚本的简单便捷性就能体现出来了。VimL 同样具有脚本语言这个共性。

    用 Vim 编写 VimL 代码,另有个天然的优势,就是编辑器,解释器,与文档手册一体化 ,同时仍然保持了 Vim 的小巧,不像静态语言的IDE那么笨重。

    编程思想基本是独立于语言的,大多数语言都是相通的。现代的高级脚本语言更是几乎都 能提供差不多的功能。(而且,据说只要是“图灵完备”的语言,理论上都能做任何事)。 所以,经常使用 Vim 的程序猿,如果想多学一门脚本语言,那 VimL 是个不坏的选择。

    文本约定

    本书正文共十章,可粗略分为三部分。第 1-3 章为基础篇,第 4-7 章为中级篇,第 8-10 为高级篇。在行文组织上尽量循序渐进,建议按顺序阅读。文中经常用提示用 :help 命令查阅相关帮助主题,此后忘记细节时可随时查询。

    关于示例代码块,: 开始的行表示 Vim 的命令行(也叫 ex 命令),$ 开始的行表 示从 shell 运行的命令行。较短的示例代码,可以直接输入或粘贴入 vim 的命令行,较 长的示例代码,建议保存 .vim 文件,然后 :source