vi的几个常用技巧_第1页
vi的几个常用技巧_第2页
vi的几个常用技巧_第3页
vi的几个常用技巧_第4页
vi的几个常用技巧_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 vi的几个常用技巧在使用 vi 编辑器时 无论是初次使用的用户,还是有经验的用户 大多数人往往只掌握核心命令集,这些命令可以执行最常用的功能:导航或保存文件;插入、更新、删除或搜索数据;退出但不保存修改。但是,vi 编辑器极其强大,特性和功能非常丰富。即使在多年使用 vi 之后,您仍然可能会发现有不知道的新命令。本文讨论的命令就属于不太为人所知的命令,但是它们可以简化您目前采用的操作方法,让您的工作方式更高效,或者 让您能够完成原来不知道可以用 vi 完成的操作。打开和关闭行号vi 编辑器的许多选项可以控制编辑会话的外观和感觉。使用 :set 命令修改 vi 中的会话设置。按 Escape

2、键进入命令模式之后,可以使用 :set all 命令显示选项和设置的列表。可以设置的选项之一是 number,它的作用是打开和关闭行号(见 清单 1)。清单 1. 打开行号之前# Internet host table#:1localhost127.0.0.1localhost loghost192.168.0.6centos5192.168.0.10appserv192.168.0.11webserv192.168.0.12test192.168.0.5solaris10 # Added by DHCP:set number这个命令让 vi 在当前编辑的文件中的每个记录上显示行号。让 vi

3、进入命令模式之后,可以输入 :set number 并按回车来打开行号(见 清单 2)。清单 2. 开行号之后1#2# Internet host table3#4:1localhost5127.0.0.1localhost loghost6192.168.0.6centos57192.168.0.10appserv8192.168.0.11webserv9192.168.0.12test10192.168.0.5solaris10 # Added by DHCP:set number可以使用 :set nonumber 命令关闭行号。还可以使用这个命令和 :set number 命令的简写,

4、即 :set nu 和 :set nonu。如果需要快速计算要用 vi 函数处理的行数,显示行号会非常有帮助。当行数很多,可能跨多个屏幕时,行号尤其有用。另外,有时候您知道要处理的行范围,但是需要查明要在 vi 命令中使用的初始和结束行号。如果希望每次进入 vi 会话时都显示行号,那么在主目录中的 .exrc 文件中添加 set number 行。自动缩进在用某些编程语言编写代码时,缩进是样式的重要部分,可以确保代码的可读性更好。如果需要,可以在 vi 编辑器中根据编程语言的样式设置自动缩进。使用 autoindent 打开或关闭自动缩进(见 清单 3)。在使用 vi 编辑器时 无论是初次使用

5、的用户,还是有经验的用户 大多数人往往只掌握核心命令集,这些命令可以执行最常用的功能:导航或保存文件;插入、更新、删除或搜索数据;退出但不保存修改。但是,vi 编辑器极其强大,特性和功能非常丰富。即使在多年使用 vi 之后,您仍然可能会发现有不知道的新命令。本文讨论的命令就属于不太为人所知的命令,但是它们可以简化您目前采用的操作方法,让您的工作方式更高效,或者 让您能够完成原来不知道可以用 vi 完成的操作。打开和关闭行号vi 编辑器的许多选项可以控制编辑会话的外观和感觉。使用 :set 命令修改 vi 中的会话设置。按 Escape 键进入命令模式之后,可以使用 :set all 命令显示选

6、项和设置的列表。可以设置的选项之一是 number,它的作用是打开和关闭行号(见 清单 1)。清单 1. 打开行号之前# Internet host table#:1localhost127.0.0.1localhost loghost192.168.0.6centos5192.168.0.10appserv192.168.0.11webserv192.168.0.12test192.168.0.5solaris10 # Added by DHCP:set number这个命令让 vi 在当前编辑的文件中的每个记录上显示行号。让 vi 进入命令模式之后,可以输入 :set number 并按回

7、车来打开行号(见 清单 2)。清单 3. 打开自动缩进#!/bin/ksh#forfile in /etc/*doif -f $file ; thenecho $file is a file:set autoindent此之后,如果在一行的开头输入空格或制表符,那么后续的新行将会缩进到相同的位置。在命令模式下,输入 :set autoindent,然后按回车打开自动缩进。通过设置 shiftwidth 确定缩进级别。例如,:set shiftwidth=4 把每级缩进设置为四个空格(见 清单 4)。单 4. 设置缩进级别#!/bin/ksh#forfile in /etc/*doif -f $

8、file ; thenecho $file is a fileelif -d $file ; thenecho $file is a directoryfidone:set shiftwidth=4在命令模式下,可以使用 命令让现有的一行增加一级缩进,使用 就会让下面五行增加一级缩进。清单 5 显示结果。清单 5. 缩进代码块#!/bin/ksh#forfile in /etc/*doif -f $file ; thenecho $file is a fileelif -d $file ; thenecho $file is a directoryfidone可以使用 :set noautoi

9、ndent 命令关闭自动缩进。还可以使用这个命令和 autoindent 命令的简写,即 :set ai 和 :set noai。还可以使用 :set ai sw=4 在一个命令中打开缩进并设置缩进级别。如果希望每次启动 vi 会话时都启用自动缩进并把缩进级别设置为四个空格,那么在主目录中的 .exrc 文件中添加 set ai sw=4 行。在搜索时不区分大小写如您所知,在 UNIX 中执行搜索时,模式匹配是区分大小写的。但是,如果希望 vi 不区分大小写,那么可以使用 :set ignorecase 命令。使用 :set noignorecase 恢复区分大小写。还可以使用简写(:set

10、ic 和 :set noic)。如果希望每次进入 vi 会话时都启用不区分大小写的搜索,那么在主目录中的 .exrc 文件中添加 set ignorecase 行。复合搜索在 vi 中,可以使用 / 命令搜索字符串,这需要以字面字符串或正则表达式的形式指定要匹配的模式。例如,要想在文件中搜索单词 echo,只需进入命令模式,输入 /echo,然后按回车。这个命令会找到 清单 6 所示文件的第 3 行的第一个单词。清单 6. 复合搜索1#!/bin/ksh2#3echo Starting4file=$156echo $file78if $file =1 ; then9(file=$file+1)

11、10echo Adding one gives 11$file12fi13echo Ending14exit可以使用简单的正则表达式指定寻找包含某一单词而且后面有另一个单词的行。例如,要想寻找包含字符串 echo、后面有零个或更多字符、之后是字符串 file 的第一行,应该使用 /echo.*file。在 清单 6 所示的文件中,这个命令会找到第 6 行的第一个单词。但是,只有这两个字符串出现在同一行上,这个命令才认为是匹配的。如果希望搜索出现在另一个模式或字符串后面的某个模式或字符串,不管这两个模式或字符串是否在同一行上,那么可以指定由分号 (分隔的两个搜索命令,从而执行复合搜索。例如,要想

12、搜索出现在字符串Unknown macro: file+1 后面的字符串 echo,应该使用 /+1/;/echo/。在 清单 6 所示的文件中,这个命令会找到第 10 行的第一个单词。复合搜索对于寻找代码中出现在另一个命令后面的某个命令尤其有用 例如,在设置某个变量之后调用函数的地方。重放搜索模式当在文件中搜索要替换的模式时,可以让 vi 把要匹配的任何模式保存在缓冲区中;然后,在执行替换时,可以用缓冲区引用号重放它们。方法是把模式放在 ( 和 ) 之间,这会指示 vi 把模式放在编号的缓冲区(1 到 9)中。在执行替换时,可以用缓冲区引用号 1 到 9 引用这些缓冲区。例如,假设要在 清单

13、 7 所示的文件中搜索以单词 Martin 开头的行并对每个匹配添加前缀 Mr 和后缀 Wicks,那么进入命令模式,输入 vi 命令 :%s/(Martin)/Mr 1 Wicks/g,然后按回车。清单 7. 重放搜索模式(之前)1#!/bin/ksh2#3echo Starting4file=$156echo $file78if $file =1 ; then9(file=$file+1)10echo Adding one gives 11$file12fi13echo Ending14exit下面把这个命令分解开解释一下: :%s 指示 vi 执行替换。 / 模式分隔符。 (Martin

14、) 寻找以字符串 Martin 开头的行并把这个字符串保存在缓冲区 1 中。 / 模式分隔符。 Mr 1 Wicks 把找到的字符串替换为字符串 Mr,加上缓冲区 1 中的内容,再加上字符串 Wicks。 / 模式分隔符。 g 全局修改(即修改所有匹配的地方)。在搜索和替换字符串中都可以使用缓冲区引用。修改的结果见 清单 8。在使用 vi 编辑器时 无论是初次使用的用户,还是有经验的用户 大多数人往往只掌握核心命令集,这些命令可以执行最常用的功能:导航或保存文件;插入、更新、删除或搜索数据;退出但不保存修改。但是,vi 编辑器极其强大,特性和功能非常丰富。即使在多年使用 vi 之后,您仍然可能

15、会发现有不知道的新命令。本文讨论的命令就属于不太为人所知的命令,但是它们可以简化您目前采用的操作方法,让您的工作方式更高效,或者 让您能够完成原来不知道可以用 vi 完成的操作。打开和关闭行号vi 编辑器的许多选项可以控制编辑会话的外观和感觉。使用 :set 命令修改 vi 中的会话设置。按 Escape 键进入命令模式之后,可以使用 :set all 命令显示选项和设置的列表。可以设置的选项之一是 number,它的作用是打开和关闭行号(见 清单 1)。清单 1. 打开行号之前# Internet host table#:1localhost127.0.0.1localhost loghos

16、t192.168.0.6centos5192.168.0.10appserv192.168.0.11webserv192.168.0.12test192.168.0.5solaris10 # Added by DHCP:set number这个命令让 vi 在当前编辑的文件中的每个记录上显示行号。让 vi 进入命令模式之后,可以输入 :set number 并按回车来打开行号(见 清单 2)。清单 2. 开行号之后1#2# Internet host table3#4:1localhost5127.0.0.1localhost loghost6192.168.0.6centos57192.16

17、8.0.10appserv8192.168.0.11webserv9192.168.0.12test10192.168.0.5solaris10 # Added by DHCP:set number可以使用 :set nonumber 命令关闭行号。还可以使用这个命令和 :set number 命令的简写,即 :set nu 和 :set nonu。如果需要快速计算要用 vi 函数处理的行数,显示行号会非常有帮助。当行数很多,可能跨多个屏幕时,行号尤其有用。另外,有时候您知道要处理的行范围,但是需要查明要在 vi 命令中使用的初始和结束行号。如果希望每次进入 vi 会话时都显示行号,那么在主目

18、录中的 .exrc 文件中添加 set number 行。自动缩进在用某些编程语言编写代码时,缩进是样式的重要部分,可以确保代码的可读性更好。如果需要,可以在 vi 编辑器中根据编程语言的样式设置自动缩进。使用 autoindent 打开或关闭自动缩进(见 清单 3)。在使用 vi 编辑器时 无论是初次使用的用户,还是有经验的用户 大多数人往往只掌握核心命令集,这些命令可以执行最常用的功能:导航或保存文件;插入、更新、删除或搜索数据;退出但不保存修改。但是,vi 编辑器极其强大,特性和功能非常丰富。即使在多年使用 vi 之后,您仍然可能会发现有不知道的新命令。本文讨论的命令就属于不太为人所知的

19、命令,但是它们可以简化您目前采用的操作方法,让您的工作方式更高效,或者 让您能够完成原来不知道可以用 vi 完成的操作。打开和关闭行号vi 编辑器的许多选项可以控制编辑会话的外观和感觉。使用 :set 命令修改 vi 中的会话设置。按 Escape 键进入命令模式之后,可以使用 :set all 命令显示选项和设置的列表。可以设置的选项之一是 number,它的作用是打开和关闭行号(见 清单 1)。清单 1. 打开行号之前# Internet host table#:1localhost127.0.0.1localhost loghost192.168.0.6centos5192.168.0.

20、10appserv192.168.0.11webserv192.168.0.12test192.168.0.5solaris10 # Added by DHCP:set number这个命令让 vi 在当前编辑的文件中的每个记录上显示行号。让 vi 进入命令模式之后,可以输入 :set number 并按回车来打开行号(见 清单 2)。清单 3. 打开自动缩进#!/bin/ksh#forfile in /etc/*doif -f $file ; thenecho $file is a file:set autoindent此之后,如果在一行的开头输入空格或制表符,那么后续的新行将会缩进到相同的

21、位置。在命令模式下,输入 :set autoindent,然后按回车打开自动缩进。通过设置 shiftwidth 确定缩进级别。例如,:set shiftwidth=4 把每级缩进设置为四个空格(见 清单 4)。单 4. 设置缩进级别#!/bin/ksh#forfile in /etc/*doif -f $file ; thenecho $file is a fileelif -d $file ; thenecho $file is a directoryfidone:set shiftwidth=4在命令模式下,可以使用 命令让现有的一行增加一级缩进,使用 就会让下面五行增加一级缩进。清单

22、5 显示结果。清单 5. 缩进代码块#!/bin/ksh#forfile in /etc/*doif -f $file ; thenecho $file is a fileelif -d $file ; thenecho $file is a directoryfidone可以使用 :set noautoindent 命令关闭自动缩进。还可以使用这个命令和 autoindent 命令的简写,即 :set ai 和 :set noai。还可以使用 :set ai sw=4 在一个命令中打开缩进并设置缩进级别。如果希望每次启动 vi 会话时都启用自动缩进并把缩进级别设置为四个空格,那么在主目录中的

23、 .exrc 文件中添加 set ai sw=4 行。在搜索时不区分大小写如您所知,在 UNIX 中执行搜索时,模式匹配是区分大小写的。但是,如果希望 vi 不区分大小写,那么可以使用 :set ignorecase 命令。使用 :set noignorecase 恢复区分大小写。还可以使用简写(:set ic 和 :set noic)。如果希望每次进入 vi 会话时都启用不区分大小写的搜索,那么在主目录中的 .exrc 文件中添加 set ignorecase 行。复合搜索在 vi 中,可以使用 / 命令搜索字符串,这需要以字面字符串或正则表达式的形式指定要匹配的模式。例如,要想在文件中搜索

24、单词 echo,只需进入命令模式,输入 /echo,然后按回车。这个命令会找到 清单 6 所示文件的第 3 行的第一个单词。清单 6. 复合搜索1#!/bin/ksh2#3echo Starting4file=$156echo $file78if $file =1 ; then9(file=$file+1)10echo Adding one gives 11$file12fi13echo Ending14exit可以使用简单的正则表达式指定寻找包含某一单词而且后面有另一个单词的行。例如,要想寻找包含字符串 echo、后面有零个或更多字符、之后是字符串 file 的第一行,应该使用 /echo.

25、*file。在 清单 6 所示的文件中,这个命令会找到第 6 行的第一个单词。但是,只有这两个字符串出现在同一行上,这个命令才认为是匹配的。如果希望搜索出现在另一个模式或字符串后面的某个模式或字符串,不管这两个模式或字符串是否在同一行上,那么可以指定由分号 (分隔的两个搜索命令,从而执行复合搜索。例如,要想搜索出现在字符串Unknown macro: file+1 后面的字符串 echo,应该使用 /+1/;/echo/。在 清单 6 所示的文件中,这个命令会找到第 10 行的第一个单词。复合搜索对于寻找代码中出现在另一个命令后面的某个命令尤其有用 例如,在设置某个变量之后调用函数的地方。重放

26、搜索模式当在文件中搜索要替换的模式时,可以让 vi 把要匹配的任何模式保存在缓冲区中;然后,在执行替换时,可以用缓冲区引用号重放它们。方法是把模式放在 ( 和 ) 之间,这会指示 vi 把模式放在编号的缓冲区(1 到 9)中。在执行替换时,可以用缓冲区引用号 1 到 9 引用这些缓冲区。例如,假设要在 清单 7 所示的文件中搜索以单词 Martin 开头的行并对每个匹配添加前缀 Mr 和后缀 Wicks,那么进入命令模式,输入 vi 命令 :%s/(Martin)/Mr 1 Wicks/g,然后按回车。清单 8. 重放搜索模式(之后)Mr Martin Wicks is an IT consu

27、ltant. Martin likessnowboarding and mountain biking. Martin hasworked on UNIX systemsforover15years. Martin alsoworkedformany years before that on mainframes.Mr Martin Wicks lives in London.:%s/(Martin)/Mr 1Wicks/g书签可以让 vi 在文件中的特定位置放上书签。方法是按 Escape 键,再按 M 键,然后输入另一个表示书签引用的字母表字符。因此,最多可以有 26 个书签,分别名为 a

28、 到 z。要返回到上一书签,按 Escape 键,再按反撇号(),然后输入书签引用字符。例如,按 Escape 之后按 M 和 A 键,就会把当前游标位置保存在书签 a 中。在编辑会话中,以后希望返回到这个游标位置时,只需按 Escape,然后输入 A。可以使用双反撇号()命令在当前书签和前一个书签之间切换。查找、更新、查找下一个、重复在 vi 编辑器中,最有用的搜索/替换特性之一是查找与某个模式匹配的字符串,更新它,然后继续搜索下一个匹配的字符串,然后选择是否以相同方式更新它。这与 Microsoft Word 中的查找下一个/替换功能很相似。您可能已经知道可以在 vi 中搜索字符串模式,方

29、法是进入命令模式,输入 /search_pattern(其中的 search_pattern 是字符串或正则表达式),然后按回车。这样做就会找到与指定的模式匹配的第一个字符串。在此之后,可以在找到的文本上执行任何操作。例如,按 Escape,再按 C 和 W 键,再输入更多文本,就会把找到的字符串替换为另一个单词。要想快速地找到与模式匹配的下一个地方,应该按 Escape,然后按 N 键。在找到下一个匹配时,可以使用点号键(.)在这个位置重复最近的文本操作,比如前一个示例中使用的修改单词(cw)操作。然后,可以使用这些键继续寻 找其他匹配(n)并选择重复文本操作(.),操作方式与使用 Word

30、 中的查找下一个/替换功能很相似。切换大小写在 vi 中,可以切换游标下的字母字符的大小写,方法是按 Escape,然后按波浪号键()。这会在小写和大写之间来回切换。按着这个键,移动游标经过行中的每个字符,就会切换遇到的每个字母字符的大小写。可 以在波浪号前面输入一个数字,表示希望改变多少个字母字符的大小写。筛选您可能知道,在 vi 中按 Escape,输入 :!command(其中的 command 是要执行的 UNIX 命令),然后按回车,就可以在 shell 中执行命令。例如,:!pwd 显示编辑会话当前的工作目录。但是,还可以把文件的一部分作为标准输入发送给 UNIX 命令,并用产生的输出替换编辑缓冲区中的相同部分。例如,如果希望在 vi 会话内对 清单 9 所示的整个文件进行排序,可以按 Escape,输入 :1,$!sort 并按回车,这让 vi 把从第一行到文件末尾($)的所有内容传递给 sort 命令,用输出替换指定的部分。清单 9. 在 vi 会话内执行文件排序(排序之前)543276548963134:1,$!sort清单 10 显示 sort 操作的结果。清单 10. 在 vi 会话内执行文件排序(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论