标题: Vim 实用技术,第 1 部分 实用技巧(1) [打印本页] 作者: look_w 时间: 2018-5-18 21:16 标题: Vim 实用技术,第 1 部分 实用技巧(1)
0. Vim 简介作为开源世界最重要的编辑器之一(另一个是 Emacs),Vim 以其强大的功能和可定制能力被众多开发者所喜爱。不过,也许就是因为 Vim 的功能太强大了,要真正用好 Vim 并不容易。本文作者在多年的实际使用中逐渐掌握了一些实用技术,在此介绍给大家。——本文并不企图对 Vim 作全面而系统的介绍,但也绝非零星地点到即止;而是希望通过介绍一些重要特性和提供相关参考信息,引起大家的兴趣,去深入挖掘其能力,真正把这一强大的工具用好。
下面首先对 Vim 做一下最基本的介绍,并给出一些参考信息,以方便对 Vim 不熟悉的读者也能够理解并自己查阅进一步信息。
与大部分其它编辑器不同,进入 Vim 后,缺省状态下键入的字符并不会插入到所编辑的文件之中。Vim 的模式(mode,可以简单地理解为“状态”)概念非常重要。需要知道,Vim 有以下几个模式:
选择(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 定制版本。
图 11.2 中文支持Vim 支持世界上的主要语言,当然也包括中文。如果你用 Vim 编辑中文,而中文不能正确显示,那有两种可能性:一是使用的 Vim 不完整,不含多字节语言支持(multi_byte 特性);二是某个配置出了问题。
说到多语言支持,最基本的概念有两个:一是文件的语言编码,而是环境的内部编码。在较老的操作系统中,不管 Linux 还是 Windows,这两个编码都是一样的,也就意味着,一次只能处理一种编码的文件:要么只能处理西文编码(Latin1,即 ISO-8859-1 [5]),要么只能处理中文编码(GB2312 [2])。而在新的操作系统中,这两者可以是不一样的。在 Linux 上,常见的情况是环境的内部编码使用 UTF-8 [6],而 UTF-8 可以同任何一种语言编码作无损转换,这就保证了系统的多语言处理能力。Vim 这方面秉承了 Unix/Linux 的传统,在内部编码使 UTF-8 的时候,可以同时处理不同意语言编码的文件。
以下列出了和语言编码的相关的设置:
环境变量 LANG(使用的语言);
环境变量 LC_CTYPE(使用的内部编码);
Vim 选项 encoding(Vim 的内部编码);
Vim 选项 termencoding(Vim 在与屏幕/键盘交互时使用的编码);
Vim 选项 fileencoding(Vim 当前编辑的文件在存储时的编码);
Vim 选项 fileencodings(Vim 打开文件时的尝试使用的编码);
Vim 选项 ambiwidth(对“不明宽度”字符的处理方式;Vim 6.1.455 后引入)。
如果你的环境只需要处理简体中文的话,那么,最简单的方式就是所有的设定全部使用简体中文。只需要:设定 LANG=zh_CN.GB2312,不设定 LC_CTYPE(默认跟 LANG 一样),不设定与编码相关的 Vim 选项(默认由 LANG 和 LC_CTYPE 决定),也无需设定 Vim 选项 ambiwidth。也就是说,我们把语言设定为中国(CN)使用的中文(zh),编码为 GB2312(注意:Vim 内部并不识别国标 GB18030 [3],所以此处只能设 GB2312;参看下面关于 UTF-8 的讨论)。
不过,如果按照目前 Linux 下的惯例,内部编码一律使用 UTF-8 的话,会有一些额外的好处,其中之一就是在这种情况下 Vim 支持同时编辑多种不同编码的文件,如简体中文和繁体中文(参见图 2);另外,此时 Vim 也可以通过编码转换支持 GBK [4] 和 GB18030了。这样,众多关于语言编码的 Vim 选项就有了用武之地了。下面进一步说明一下这些选项和推荐设定(如果适用的话):
图 2
termencoding:取决于实际的终端或 X Window 的设定。举例来说,如果选择语言简体中文登录到 X Window,或者正在使用 CXTERM [10] 的话,那么该选项应被设为 GB2312;如果使用缺省的语言(LANG=en_US.UTF-8)登录到 X Window,或者使用 PuTTY [11] 远程访问 Linux 机器、并且设定里的字符编码(配置中 Window-Translation)设为 UTF-8 的话,该选项就应该设为 utf-8。从 Windows 下使用 PuTTY 远程连接 Linux 的请特别注意,测试表明,仅在使用 UTF-8 的情况下,PuTTY 才能可靠地支持中文的显示和输入(显示字体必须设成中文字体)。