前言

前言 #

这是一篇有关 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 命令查阅相关帮助主题,此后忘记细节时可随时查询。