http://www.ibm.com/developerworks/cn/aix/library/au-customize_vi/ 定制 vi 和 Vim 编辑器 使用自定义命令扩展标准编辑器 vi(可视化)文本编辑器是最古老的面向屏幕的编辑器,仍然在所有 UNIX、Linux 和其他 UNIX 类的系统上默认提供。由于其陈旧性加上其基础编辑模型,vi 总是得不到应有的尊崇,但是它是一个无比快速且可靠的工具,每一位 UNIX 和 Linux 管理员都应当知道如何使用它。Vim(vi 改进版)是常用的 vi 的现代版本,在诸多方面扩展了 vi 的功能,同时保留向后兼容性。本文解释如何以多种方式定制 vi 和 Vim,从简单的配置设置到自定义命令。 评论: William von Hagen , 系统管理员,作家, WordSmiths 关闭 William von Hagen 担任 UNIX 系统管理员已经超过 20 年,并从 1993 年开始成为 Linux 爱好者。Bill 是一些图书的作者或合著者,涉及的主题包括 Ubuntu Linux、Xen Virtualization、GNU Compiler Collection (GCC)、SuSE Linux、Mac OS X、Linux 文件系统和 SGML。他还为 Linux 和 Mac OS X 出版物和网站撰写了许多文章。 2011 年 8 月 08 日 内容 vi 和 Vim 定制的类型 vi 和 Vim 的启动文件 设置 vi 和 Vim 配置选项 定制键绑定和创建命令 定义缩略词 结束语 下载 参考资料 评论 自 1978 年以来,vi 文本编辑器(或软件通用型的克隆版本)已包含为每个 UNIX 和类似 UNIX 的系统的一部分。由于 ATT 许可限制,类似 UNIX 的开源系统必须从头开始编写其自己的 vi 克隆版本,因而衍生了 Elvis、nvi 和 Vim(后者将在本文与 vi 一同加以讨论)等与 vi 工作方式相似的工具。这种普遍性使其成为系统管理员真正不可或缺的工具之一,这些系统包括任何 UNIX、Linux、Berkeley Software Distribution (BSD) 和其他类似 UNIX 的计算机系统。 热衷于使用 UNIX 和 UNIX 类系统上的 Emacs 文本编辑器的人,包括我自己,喜欢它的灵活性、可扩展性和可配置性。本文强调 vi 与最受欢迎的克隆版本 Vim 中相同的那些功能。vi 和 Vim 编辑器提供基本上与 Emacs 相同的可行定制和配置,且 vi 对缩略词的支持在 Emacs 中是无与伦比的。了解 vi 可以使任何系统管理员立即在任何 UNIX 类系统上变得高效起来,远在您弄清如何安装 Emacs 之前。 本文解释如何定制 vi 和 Vim,而非如何使用它们。参见 参考资料 获取 vi 和 Vim 教程的链接。这部分还列出其他流行的 vi 克隆版本以及在哪里获取它们。 vi 和 Vim 定制的类型 vi 和 Vim 编辑器在文本文件或环境变量中存储定制(这将在下一节中讨论)。每个 vi 或 Vim 配置文件都可以包含任何数量的配置和定制命令类型,如 表 1 所示。 表 1. 配置和定制命令 命令 描述 ab 在 Insert 模式下输入文本时若遇到特定字符序列,可定义缩略词。这些缩略词的功能如同 Microsoft Word 中的 AutoCorrect 特性。 map 将现有 vi 或 Vim 命令分配给一个自定义键或定义您自己的自定义命令。参见 “ 定制键绑定和创建命令 ” 了解更多信息。 set 设置一个 vi 或 Vim 变量。根据变量类型及其使用方式,可以通过简单地命名特定变量或指定和分配一个显式值来设置变量。参见 “ 设置 vi 和 Vim 配置选项 ” 了解更多信息。 您可以在一个 vi 或 Vim 配置文件中的命令内穿插配置命令和注释。在 Vim 配置文件中,双引号()后面的任何字符出现在任何地方都被看作是一条注释,而标准 vi 配置文件中的注释必须将双引号作为当前行的第一个字符。标准 vi 配置文件不能包含任何空行,而在 Vim 配置文件中则是可以的。 Vim 编辑器支持额外的关键字,允许您利用原始 vi 编辑器中没有的功能,包括 表 2 中所示的那些。 表 2. Vim 支持的额外关键字 关键字 描述 autocmd 基于您正在编辑的文件类型自动执行特定命令。参见 下载 部分获取 sample.vimrc 文件,其中包含一个 autocmd 示例。 filetype 在编辑特定类型的文件时加载和启动提供额外功能的各种插件。 function 定义一个可映射到一个关键命令的自定义函数。 syntax 启动或关闭语法高亮显示。 Vim 使用的配置文件也支持一个丰富的内部函数集,可在条件表达式中使用。这些让您可以编写自己的函数并在不同的上下文中执行它们。参见 参考资料 部分的链接,了解有关这种条件句的更多信息。 vi 和 Vim 的启动文件 您可以在环境变量、配置文件或两者中定义前一节讨论的 vi 和 Vim 配置选项。vi 和 Vim 都使用一系列环境变量和配置文件加载定制和共享许多相同的配置序列,不过 Vim 使用一个更广泛的集合。 默认情况下,vi 和 Vim 编辑器为配置信息按列出的顺序检查 表 3 中的位置。 表 3. vi 和 Vim 为配置信息检查的位置 顺序 位置 描述 1 通过 -u 选项调用的特定文件 (仅限 Vim):如果使用 -u 选项进行调用,后面紧跟配置文件的名称,Vim 会忽略其余配置序列,而仅从指定文件加载设置。要跳过所有配置文件,您可以将 NONE 指定为 -u 选项的参数。 您可以阻止标准 vi 加载任何配置文件,方法就是将EXINIT 环境变量设置为 :setnoexrc 字符串,然后执行 vi。如果您在使用 Bash shell,以下示例通过命令行执行该操作: EXINIT=":set noexrc" vi file1.txt 2 编译 Vim 时识别的特定配置文件 (仅限 Vim):编译 Vim 时(通常是 /etc/vim/vimrc 或 /usr/share/vim/vimrc)识别出的特定配置文件包含 Vim 的系统级配置设置。该文件通常设置一些配置选项,加载特定于运行中的操作系统和操作系统版本的其他 Vim 配置文件。 3 VIMINIT 环境变量 (仅限 Vim):一个环境变量,由一个或多个配置命令序列组成。如果设置了该环境变量,Vim 不再寻找任何后续配置文件或检查其他环境变量。 4 $HOME/.vimrc (仅限 Vim):一个名为 .vimrc 的文件,位于用户的主目录中,包含配置选项。如果找到该文件,Vim 不再寻找任何后续配置文件或检查其他环境变量。参见 下载 部分获取 sample.vimrc 文件。 5 EXINIT 环境变量 由一个或多个配置命令序列组成的一个环境变量。 6 $HOME/.exrc 一个名为 .exrc 的文件,位于用户的主目录中,包含配置选项。如果找到该文件,vi 和 Vim 不再寻找任何后续配置文件,除非在该配置文件中设置了 exrc 选项。参见 下载 部分获取 sample.exrc 文件。 7 .exrc 一个名为 .exrc 的文件,位于当前工作目录中,包含配置选项。(如果您在 Microsoft Windows 系统上使用 Vim,该文件的名称为 _exrc.)。如果之前的配置指令或文件设置了 exrc 选项(或者如果您在从主目录启动 vi 且那里有一个 .exrc 文件,因而匹配搜素序列中的以下步骤),才会读取当前目录中的 .exrc 文件。 这些令人印象深刻的一系列备选方案使得为 Vim 配置系统级默认设置尤为简单,同时也能实现 Vim 与标准 vi 配置文件之间的一些智能交互。例如,当我的主目录不位于网络文件系统中时,我将 shell 和应用程序的所有配置文件复制到这些系统中,在那里我有帐户。有些系统使用 vi,而对其他系统提供 Vim(作为 vi)。因此,我将所有特定于 vi 的配置选项放到一个 .vimrc 文件中,并将以下行放到我的 .vimrc 文件的开头: so .exrc 这使得 Vim 在加载我的 .vimrc 文件中剩余部分的配置命令之前,读取存储在我的 .exrc 文件中的所有配置命令。在仅存在 vi 的系统上,我的 .exrc 文件正常读取,.vimrc 文件被忽略。在我使用 Vim 时,在我的 .vimrc 文件开头加载配置命令能使在两个文件中都存在的键映射被更精致的 Vim 版本所覆盖。 设置 vi 和 Vim 配置选项 set 命令使用户能够设置内部 vi 和 Vim 变量。变量根据不同的类型以不同方式予以设置: 设置为 on 或 off 的变量由 set variable 命令设置,使用 set novariable 命令取消设置。 取值的变量由 set variable=value 命令设置。 例如,set list 命令设置列表选项,该选项告诉 vi 或 Vim 显示表示行尾的字符($)和未扩展标签(^I)字符。(在 Vim 中,该选项还显示行尾空白。)list 选项不需要值 — 仅仅设置它就足够激活功能了。您可以执行 set nolist 命令取消设置 list 选项。 其他变量采用显式值或值类型,赋值方式是使用等号(=)后面紧跟值或逗号分隔的值列表。例如,在 Vim 编辑器中,您可以配置 list 命令使用的字符,通过设置 listchars 变量的值来表示行尾,行尾空白和未扩展标签。以下命令将未扩展标签显示为 ,将行尾空白显示为 !,将行尾显示为 $: set listchars=tab:,trail:!,eol:$ 为查看您可以在 vi 或 Vim 中设置的所有选项的当前值,使用 vi 或 Vim 中的 :set all 命令。要显示特定选项的当前值,使用 f:set option? 命令。要显示通过默认值修改的所有选项,使用 :set 命令。 定制键绑定和创建命令 map 命令使用户能够绑定现有或新命令到指定键或组合键,对于 vi 的命令模式,使用 map key-sequence command 语法,对于 vi 的插入模式,使用 map! key-sequence command 。 下面是 Vim 的一些 map 命令样例: map C-T hhxp map F5 !}fmt CR 这些中的第一个将键序列 control-t 映射到 vi 命令序列 hhxp,这颠倒了当前光标位置前面的两个字符的顺序(正如 Emacs 中的 control-t )。第二个将 F5 键映射到一个键序列,该键序列调用 fmt 命令来重新格式化当前段落。 标准 vi 和 Vim 的配置文件中的 map 命令之间的一个重要区别在于,正如前面的示例所示,Vim 支持尖括号内的键标识符,以识别在某些情况下可能是不可打印字符的键。vi 需要您真正插入控制序列(通过按下 control-v 后面紧跟键序列来完成)。map 命令样例的 vi 版本如下所示: map ^T hhxp map ^@ !}fmt ^M 定义缩略词 ab 命令允许您为字符较长但不常用的术语、代码段、拼写更正等确认缩略词。每当输入一个空格或标点符号,在插入模式下输入文本时您定义的缩略词就会扩展开来。例如,我最喜欢的一些缩略词是: ab het the ab teh the 在标准 vi 中,缩略词仅在插入模式下可行,但是在 Vim 中,它们在替换模式和命令行模式下也可行。Vim 编辑器提供 cab (command-line-abbreviation)、iab (insert-mode abbreviation) 和 rab (replace-mode abbreviation) 命令,允许您限制将特定缩略词扩展为 Vim 中的特定模式。 结束语 了解如何使用 vi 和 Vim 编辑器是任何 UNIX、Linux 或其他 UNIX 类系统的系统管理员的一项基本技能。尽管 vi 是一个典型的 UNIX 工具,它高度可配置,可由许多开发人员在日常工作中使用,且可在它是惟一可用编辑器的系统上使用。 本文介绍了基本的 vi 和 Vim 配置命令,概述了 vi 和 Vim 如何找到和加载定制的配置设置。这些主题有太多内容要了解,不是一篇文章可以容纳得下的。参见 参考资料 的链接,获取更多信息。
本文是看到刘洋的博文“ 博文引用wiki百科算是cheap吗? ”后所做的一个调查。 “Wiki”没什么,它指的是一种人们可在其上通过“所见即所得”编辑器合作编辑网页的网站。可是“Wikipedia”(即维基百科)则非同寻常。“Wikipedia”是一种允许全世界连入互联网的人们合作编辑的在线百科全书;人们称:“百科全书是记录人类知识最全面、最系统的大型综合工具书。” ;也有称:“百科全书是对人类过去积累的全部知识或某一类知识的书面摘要。”。 上述两种说法中: “工具书”的定位意味着:人们利用它可以快速获取所查询条目(特别是查询者不熟悉、不确定的领域、知识)的相关知识; “摘要”的定位意味着:百科全书中叙述的内容可能不够详致,但基本正确。 所以在某方面不熟悉、不确信或者研究不够深入时,从百科全书中寻求快速支持未尝不是一种次优的选择。(潜台词:如果已经有比百科全书更好、更可信的知识来源,自然不会再求助于百科全书)。另外,由于Wiki软件的协作性,任何人对某一条目的最佳理解、定义或相关知识都可以在第一时间反映到条目中(通过追加、修订、删除等操作,并同时保留所有操作历史以便回滚),并随即接受所有关心该条目的人的审议。这个特点正是Wikipedia出生不到5年,即已赶上大英百科全书的最重要原因 。 这同时也使得维基百科拥有发展成最佳参考资料的潜在力量 。 到目前为止(2011.0220.2308),维基百科无论在内容的丰富程度、可用性、易用性、可信性方面,已经较2005年引起广泛关注 时有了更大的提高。 Nature 在2005年12月的一份调查 的结果中有这样一句话:“Jimmy Wales' Wikipedia comes close to Britannica in terms of the accuracy of its science entries, a Nature investigation finds. ” 更多关于“维基百科的可靠性”的知识请参考 。对“维基百科的可靠性”有争议的人,可以访问 ,或者直接参与 的编辑。 a news story comparing the accuracy of science articles taken from the website of Encyclopedia Britannica and Wikipedia , http://www.nature.com/nature/journal/v438/n7070/full/438900a.html Nature's responses to Encyclopaedia Britannica, March 2006. http://www.nature.com/nature/britannica/index.html Wikipedia, Britannica: A Toss-Up, http://www.wired.com/culture/lifestyle/news/2005/12/69844 Study: Wikipedia as accurate as Britannica, http://news.cnet.com/Study-Wikipedia-as-accurate-as-Britannica/2100-1038_3-5997332.html Reliability of Wikipedia, http://en.wikipedia.org/wiki/Reliability_of_Wikipedia Talk:Reliability_of_Wikipedia, http://en.wikipedia.org/wiki/Talk:Reliability_of_Wikipedia