本章将学习vi同类品提供的相关功能。
它们都是我兄弟:
有许多可以自由取得的vi编辑器同类品。《vi和vim编辑器》重点介绍了vim编辑器,也简要地介绍了另外三种常用的同类品:nvi,elvis,vile。这些同类品都提供了vi之外的许多扩展功能,尽管方式可能不同,但这些同类品通常会提供相同的扩展功能。本篇文章将总体介绍这些同类品提供的扩展功能。
多窗口编辑:可以将屏幕分割成多个“窗口”,从而在每个窗口编辑不同的文件,或者观察同一文件的不同部分。这使得同时在多个文件中工作更加容易,在文件间剪贴文本也更加方便。
图形用户界面:除了nvi之外,所有同类品都可以编译成支持X Window界面。
扩展的正则表达式:之前已经学习过了vi编辑器中可用于搜索和替换模式的正则表达式元字符。每种同类品都提供了某种形式的扩展正则表达式,但每一种扩展方式的“风味”都与众不同。
增强的标签:"Exuberant ctags"程序是ctags的同类品。比UNIX上的ctags功能更强大。可以产生扩展的tags文件格式,让标签的搜索与匹配处理更加灵活,更加强大。以下是"Exuberant
ctags"的特色功能:
- 支持C与C++代码,另外还支持29种程序设计语言,包括C#和java;
- 能够产生所有类型的C与C++语言标签;
- 在解析代码时非常可靠;
- 列出供人阅读用的源文件中的被选择对象的列表;
- 支持产生GNU Emacs样式的标签文件;
传统的tags文件有三个以制表符分隔的字段:标签名称(一般是标识符),包含标签的源文件,以及何处可找到标识符的指示符。指示符可以是简单的行号,或者是以斜线或问号括起的nomagic搜索模式。新的格式向下兼容传统格式。前面三个字段仍然相同:标签,文件名称与搜索模式。Exuberant ctags只会产生搜索模式,而不是任意的命令。扩展的属性会放在用于分隔的
" ;" "分隔符后面。属性间以tab字符分隔,每个属性均由以冒号分隔的两个子字段组成,第一个子字段是描述属性的关键字,默认为kind(此时可以省略),第二个则是实际的值。扩展的ctags关键字可以参考《vi和vim编辑器》p144。如下图所示,为扩展tags文件的一个示例:
位于该tags文件前面的以" !_TAG_ "开头的初始化标签,对于辨别创建文件的程序很有帮助。而且编辑器也可能会用这些特殊标签来实现特殊的功能。之后便是相应的标签定义。
标签栈:每一种vi同类品都扩充了维护标签栈的功能。每次通过" :tag "命令或者vi中的" ^] "命令搜索某个标签时,编辑器会先保存当前的位置。这样以后就可以使用vi编辑器的"CTRL + T"命令或者ex命令回到保存起来的位置。vim的标签栈功能将在后续文章进一步学习。
改进的编辑工具:所有的同类品都提供了编辑ex命令行,不限次数的撤销,任意长度的行与八位数据,增量搜索,将屏幕从左往右滚动以代替绕排过长的行,可视模式,以及模式指示器等其它特性。
编程辅助:
vi是为编程者开发的编辑器,它提供了一些功能,使得传统的UNIX编程者(编写C程序和troff文档的人)工作起来更容易。vi的同类品在此基础上,提供了更多功能:
编辑-编译的加速:在编译期间,完全不需要离开编辑器,而且可以取得编译器的输出,并自动跳到包含错误的行上。
语法高亮:将代码中的不同语法元素用不同的颜色与字体来显示。
本章vi命令总结:
本章主要介绍了部分vi同类品(vim,nvi,elvis,vile)提供的扩展功能。后续文章将重点学习vim编辑器的各种扩展功能细节。