学习vi和vim编辑器(10):高级编辑方法(1)

从本章开始将介绍一些vi和ex编辑器的高级功能。这一篇文章主要介绍如何自定义编辑环境,如何在vi中执行UNIX命令以及如何通过UNIX命令在vi中过滤文本。

自定义vi:

vi编辑器中有许多可以设置的选项,这些选项将影响vi编辑器的运作。

可以使用ex命令 " :set "在vi中改变选项。而且,只要vi被打开,就会读取位于你的主目录的" .exrc "文件,以取得vi的相关设置。在这个文件中使用" :set "命令,就可以改变vi的运作方式。除此之外,可以在当前目录中创建" .exrc "文件,从而在不同的目录中使用不同的选项来初始化vi。但是首先是主目录下的" .exrc "文件先被执行,然后才是当前目录的" .exrc "文件。除此之外,任何存储在环境变量EXINIT中的命令都会在vi打开时执行。EXINIT中的设置会比主目录中的" .exrc "文件先执行。

:set 命令:" :set "命令可以改变两种类型的选项:一种是切换选项,只能选择开启与关闭,另一种可接受数值或字符串值。要将某个切换选项开启,使用 " :set option", 要将某个切换选项关闭,使用 " :set nooption "。而对于要设置某些值的选项,可以使用等号(=)来设置这些选项。通过" :set all "会显示选项的完整列表,包括用户的设置值和vi所选择的默认值。通过 " :set option? " 来查看某个选项的当前值。命令 " :set "用于显示特别更改或设置过的选项,这些选项可以是在" .exrc "文件或者是在当前编辑会话中设置过的选项。

.exrc文件:控制vi环境的" .exrc "文件位于你的主目录中(home目录)。如果主目录中没有" .exrc "文件,可以使用vi创建。可以在" .exrc "文件中写入设置vi选项的命令,而且这个文件实际上是由ex读入,所以在" .exrc "文件中输入的命令前面不需要加冒号。如下图所示,设置tab键占4个空格:

技术分享

vi除了读取主目录中的" .exrc "文件,还可以读取当前目录中的" .exrc "文件,这样就可以在不同的目录下设置不同的选项。但是在vi读取当前目录中的" .exrc "文件之前,首先需要在你的主目录中的 " .exrc "文件中设置exrc选项,即set exrc。

还可以将选项设置保存到" .exrc "以外的文件,并用 " :so "命令读入即可(so为source的缩写)。

一些有用的选项:vi编辑器中可以设置的选项非常多,其中很多是给vi内部使用的,通常不需要修改。这里介绍几个有用的选项:

(1)选项wrapmargin用于指定行结尾到右边界的距离,这样当输入的一行超过该限制时,便可以自动换行(只会在空白处换行)。但实际测试时,感觉wrapmargin选项并不是很好用。如果想设置一行的宽度,还可以使用textwidth选项;

(2)另外有三个选项可以控制vi搜索时的动作,例如搜索时是否忽略大小写,是否回到文件开头继续搜索,模式匹配时是否辨识通配符,这三个选项的默认值分别为noignorecase,wrapscan,magic;

(3)编程者可能感兴趣的选项: autoindent(自动缩进),showmatch(括号的匹配),tabstop(tab键占几个空格), number(显示行号),list(将tab键打印为^I,行结尾标记为$等);

(4)autowrite选项:当设置该选项时,如果下达" :n "命令以切换到下一个文件,或者使用" :! "来执行shell命令时,vi都会自动将更改过的缓冲区内容写入磁盘。

执行UNIX命令:

使用vi时,可以显示或者读入任何UNIX命令所产生的结果。感叹号会告诉ex创建一个shell,并将后续的文本视为UNIX命令,即" :!command "。如果想要执行一系列命令,而中途不想回到vi,则可以使用" :!sh "来创建一个shell,然后通过CTRL+D来结束shell并回到vi。

" :read "命令可以与UNIX命令结合使用,把UNIX命令的执行结果读入到文件中。在" :read "命令前面加上行地址,便可以在指定行的下一行插入命令的执行结果,否则默认是插入到当前行的下一行。如下图所示,读入当前的路径并插入到文件中:

技术分享

通过命令过滤文本:

文本块也可以作为UNIX命令的标准输入,这个命令的输出则替换了缓冲区中原来的文本。因此可以在ex或vi中通过命令来过滤文本。ex是通过行地址来指定文本块,而vi则是通过文本对象(移动命令)来指定文本块。

用ex过滤文本:如下图所示,对文件的前5行进行排序:

技术分享

用vi过滤文本:用vi过滤文本的命令形式为 " !textobject command "。因此如果当前光标处于文件的第一行,可以输入" !4j sort "来对文件的前5行排序。这里需要注意,当输入感叹号时,vi编辑器并不显示任何内容,当输入"4j"之后,vi编辑器则显示如下内容:

技术分享

接着再输入sort命令即可。从中可以发现,用vi过滤文本其实还是通过ex来过滤文本(vi编辑器使用的底层编辑器就是ex行编辑器)。除了使用该命令,还可以使用" !5!sort ",其中第二个感叹号代表当前行的意思,而前面的数字代表重复的意思。


本章vi命令总结:

" :set option "," :set nooption "," :set all "," :set option? "," :set ",wrapmargin选项,textwidth选项,ignorecase选项,wrapscan选项,magic选项,autoindent选项,showmatch选项,tabstop选项,number选项,list选项,autowrite选项," :!command "," :r !command "," :linenum, linenum  !command ", "  !textobject command。 "



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。