在vi 中,可以切换游标下的字母字符的大小写,方法是按 Escape,然后按波浪号键(~)。这会在小写和大写之间来回切换。按着这个键,移动游标经过行中的每个字符,就会切换遇到的每个字母字符的大小写。可 以在波浪号前面输入一个数字,表示希望改变多少个字母字符的大小写。
筛��
您可能知道,在vi 中按 Escape,输入 :!command(其中的 command 是要执行的 UNIX 命令),然后按回车,就可以在 shell 中执行命令。例如,:!pwd 显示编辑会话当前的工作目录。
但是,还可以把文件的一部分作为标准输入发送给 UNIX 命令,并用产生的输出替换编辑缓冲区中的相同部分。例如,如果希望在vi 会话内对清单 9 所示的整个文件进行排序,可以按 Escape,输入 :1,$!sort 并按回车,这让vi 把从第一行到文件末尾($)的所有内容传递给 sort 命令,用输出替换指定的部分。
另外,还可以在 shell 命令前面加上从当前游标位置开始希望操作的行数。方法是按 Escape,然后输入指定行数的数字,然后输入两个惊叹号(!!),最后输入 UNIX 命令。
可以使用管道分隔符(|)把 UNIX 命令连接在一起,从而在vi 会话中执行复杂强大的筛选。例如,假设要把当前vi 会话的编辑缓冲区中的文件内容替换为每行的第一个空格分隔的字段,按升序排序并转换为大写,那么在按 Escape 之后输入:
:1,$!awk ‘{print $1}’ | sort | tr [:lower:] [:upper:]
保存部分内容
可以保存当前编辑的文件的部分内容,方法是按 Escape,然后输入 :start,endw file,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后一行,w表示希望写到另一个文件中(或者覆盖现有的文件),file 是指定的部分要保存到的文件。对于最后一行,可以使用$表示文件的末尾。可以在w后面使用两个大于号(>>)表示希望把内容附加到文件中而不 是覆盖文件。清单 12 中的示例把第 6 到第 9 行(含)附加到文件/tmp/newfile 中。
#
# Internet host table
#
::1 localhost
127.0.0.1 localhost loghost
192.168.0.6 centos5
192.168.0.10 appserv
192.168.0.11 webserv
192.168.0.12 test
192.168.0.5 solaris10 # Added by DHCP
~
~
~
:6,9w >> /tmp/newfile
结束语
vi 编辑器是一个极其强大的工具,本文提供了一些技巧和诀窍,希望能够帮助您更高效地编辑文件。请记住,vi 还有更多不太为人所知的特性。祝工作愉快!