Vim 实用技术,第 1 部分: 实用技巧

来源:吴咏炜@developerworks

0. Vim 简介

作为开源世界最重要的编辑器之一(另一个是 Emacs),Vim 以其强大的功能和可定制能力被众多开发者所喜爱。不过,也许就是因为 Vim 的功能太强大了,要真正用好 Vim 并不容易。本文作者在多年的实际使用中逐渐掌握了一些实用技术,在此介绍给大家。——本文并不企图对 Vim 作全面而系统的介绍,但也绝非零星地点到即止;而是希望通过介绍一些重要特性和提供相关参考信息,引起大家的兴趣,去深入挖掘其能力,真正把这一强大的工 具用好。

下面首先对 Vim 做一下最基本的介绍,并给出一些参考信息,以方便对 Vim 不熟悉的读者也能够理解并自己查阅进一步信息。

与大部分其它编辑器不同,进入 Vim 后,缺省状态下键入的字符并不会插入到所编辑的文件之中。Vim 的模式(mode,可以简单地理解为“状态”)概念非常重要。需要知道,Vim 有以下几个模式:

●正常(normal)模式,缺省的编辑模式;下面如果不加特殊说明,提到的命令都直接在正常模式下输入;任何其它模式中都可以通过键盘上的 Esc 键回到正常模式。

●命令(command)模式,用于执行较长、较复杂的命令;在正常模式下输入“:”(一般命令)、“/”(正向搜索)或“?”(反向搜索)即可进入该模式;命令模式下的命令要输入回车键(Enter)才算完成。

●插入(insert)模式,输入文本时使用;在正常模式下键入“i”(insert)或“a”(append)即可进入插入模式(也有另外一些命令,如“c”,也可以进入插入模式,但这些命令有其它的作用)。

●可视(visual)模式,用于选定文本块;可以在正常模式下输入“v”(小写)来按字符选定,输入“V”(大写)来按行选定,或输入“Ctrl-V”来按方块选定。

●选择(select)模式,与普通的 Windows 编辑器较为接近的选择文本块的方式;在以可视模式和选择模式之一选定文本块之后,可以使用“Ctrl-G”切换到另一模式——该模式很少在 Linux 上使用,本文中就不再介绍了。

Vim 带有完整的帮助文档。在当前的 Vim 6.4 的标准发布中,有一百多章、近六十万英文词的帮助文件,进入 Vim 后输入“:help”(命令模式中输入的命令要敲回车键才结束输入,下面不再说明这一点)即可访问。本文在介绍特性时,对文档中已经说明得很详细的内容只 会提纲挈领地加以简短说明和提供应用范例,并提供访问相应的 Vim 文档的命令。

一般的发布版中还常常带有一个简单的 30 分钟的 Vim 教程,新手在操作系统的命令行上输入“vimtutor”命令即可开始学习。除上面的简单说明外,本文并不介绍最基本的 Vim 命令,Vim 的新手应该先通过教程熟悉一下 Vim,再继续往下阅读。

建议所有的 Vim 用户经常访问 Vim 的主站点 [1]。上面除了基本的发布、安装、下载等信息外,最有用的内容是用户可以上传自己写的 Vim 脚本(script)和撰写自己认为有用的提示(tip),供其他 Vim 用户使用。在写这一段的时候,Vim 站点上已有一千三百多个脚本,提示数刚好超过了一千。对于序号为 nn 的脚本,直接访问的 URL 是 http://www.vim.org/scripts/script.php?script_id=nn;对于序号为 nn 的提示,直接访问的 URL 是 http://www.vim.org/tips/tip.php?tip_id=nn。

不另加说明的话,本文讨论的内容适用于 Vim 版本 6(即从 6.0 到 6.4)。建议认真的 Vim 用户升级到 Vim 6.4,最好是自己编译升级所有的补丁包。相关信息网站上都有,此处不再赘述。

1. 实用技巧

1.1 安装

如果从 Linux 发布版直接安装 Vim,需要注意的一点是,缺省情况下系统并不一定为你安装了一个完整的 Vim。比如,在 Red Hat(以及后来的 Fedora Core)的发布版中,Vim 被拆成了四个包:vim-common(公用部分),vim-minimal(最小安装),vim-enhanced(除 X Window 支持外的完整安装),和 vim-X11(X Window 图形界面支持)。最小安装不能完整展示 Vim 的优点,通常只是作为 vi 的替代品出现,缺少很多重要的特性如多字节语言支持、鼠标支持和脚本支持。如果装了 X Window 的话,图形界面的 gvim 也比文本模式的 vim 具有更多的特性。建议大家尽可能安装完全的 Vim。

如果愿意稍稍费一点功夫,自己编译 Vim 的话,可以更好地定制 Vim。——附带的另一个好处是,你如果发现什么错误的话,你就可以自己动手来修复这个错误,或至少找到错误所在的位置,让 Bram(Vim 的作者)可以更快地解决问题。图 1 是在 Vim 中执行“:version”的结果的一部分,可以看到 Vim 有很多不同的特性(feature)可在编译时打开或关闭。如果自己编译的话,就可以选择打开需要的功能,关闭不需要的功能,来获得一个既功能强大、又小 巧快速的 Vim 定制版本。

图 1

Vim-practical-skills01

1.2 中文支持

Vim 支持世界上的主要语言,当然也包括中文。如果你用 Vim 编辑中文,而中文不能正确显示,那有两种可能性:一是使用的 Vim 不完整,不含多字节语言支持(multi_byte 特性);二是某个配置出了问题。

说到多语言支持,最基本的概念有两个:一是文件的语言编码,而是环境的内部编码。在较老的操作系统中,不管 Linux 还是 Windows,这两个编码都是一样的,也就意味着,一次只能处理一种编码的文件:要么只能处理西