|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
欢迎大家来到仓酷云论坛!年夜部分Linux开辟者对vi命相称熟习,但是遗憾的是,年夜部分隔发者都只能把握一些最经常使用的Linuxvi下令,上面先容的10个vi下令固然良多不为人知,可是在实践使用中又能让你年夜年夜进步效力。
在利用vi编纂器时―不管是初度利用的用户,仍是有履历的用户―年夜多半人常常只把握中心下令集,这些下令能够实行最经常使用的功效:导航或保留文件;拔出、更新、删除或搜刮数据;加入但不保留修正。
可是,vi编纂器极为壮大,特征和功效十分丰厚。即便在多年利用vi以后,您仍旧大概会发明有不晓得的新下令。本文会商的下令就属于不太为人所知的下令,可是它们能够简化您今朝接纳的操纵***,让您的事情体例更高效,大概让您可以完成本来不晓得能够用vi完成的操纵。
翻开和封闭行号
vi编纂器的很多选项能够把持编纂会话的表面和感到。利用:set下令修正vi中的会话设置。按Escape键进进下令形式以后,可使用:setall下令显现选项和设置的列表。能够设置的选项之一是number,它的感化是翻开和封闭行号- ##Internethosttable#::1localhost127.0.0.1localhostloghost192.168.0.6centos5192.168.0.10appserv192.168.0.11webserv192.168.0.12test192.168.0.5solaris10#AddedbyDHCP~~~:setnumber
复制代码 这个vi下令在以后编纂的文件中的每一个纪录上显现行号。让vi进进下令形式以后,能够输出:setnumber按回车来翻开行号- ##Internethosttable#::1localhost127.0.0.1localhostloghost192.168.0.6centos5192.168.0.10appserv192.168.0.11webserv192.168.0.12test192.168.0.5solaris10#AddedbyDHCP
复制代码 可使用:setnonumber下令封闭行号。还可使用这个下令和:setnumber下令的简写,即:setnu和:setnonu。假如必要疾速盘算要用vi函数处置的行数,显现行号会十分有匡助。当行数良多,大概跨多个屏幕时,行号特别有效。别的,偶然候您晓得要处置的行局限,可是必要查明要在vi下令中利用的初始和停止行号。假如但愿每次进进vi会话时都显现行号,那末在主目次中的.exrc文件中增加setnumber行。
主动缩进
在用某些编程言语编写代码时,缩进是款式的主要部分,能够确保代码的可读性更好。假如必要,能够在vi编纂器中依据编程言语的款式设置主动缩进。利用autoindent翻开或封闭主动缩进.- #!/bin/ksh##forfilein/etc/*doif[[-f${file}]];thenecho“${file}isafile”~~~~~:setautoindent
复制代码 在此以后,假如在一行的开首输出空格或制表符,那末后续的新即将会缩进到不异的地位。在下令形式下,输出:setautoindent,然后按回车翻开主动缩进。经由过程设置shiftwidth断定缩升级别。比方,:setshiftwidth=4把每级缩进设置为四个空格。- #!/bin/ksh##forfilein/etc/*doif[[-f${file}]];thenecho“${file}isafile”elif[[-d${file}]];thenecho“${file}isadirectory”fidone~~:setshiftwidth=4
复制代码 在下令形式下,可使用>>下令让现有的一行增添一级缩进,利用<<下令削减一级缩进。在这些下令后面加上一个整数,便可让多行增添或削减一级缩进。比方,把游标放在清单4中第6行的开首,进进下令形式以后,输出5>>就会让上面五行增添一级缩进。- #!/bin/ksh##forfilein/etc/*doif[[-f${file}]];thenecho“${file}isafile”elif[[-d${file}]];thenecho“${file}isadirectory”fidone~~
复制代码 可使用:setnoautoindent下令封闭主动缩进。还可使用这个下令和autoindent下令的简写,即:setai和:setnoai。还可使用:setaisw=4在一个下令中翻开缩进并设置缩升级别。假如但愿每次启动vi会话时都启用主动缩进并把缩升级别设置为四个空格,那末在主目次中的.exrc文件中增加setaisw=4行。
在搜刮时不辨别巨细写
如您所知,在UNIX®中实行搜刮时,形式婚配是辨别巨细写的。可是,假如但愿vi不辨别巨细写,那末可使用:setignorecase下令。利用:setnoignorecase规复辨别巨细写。还可使用简写:setic和:setnoic。假如但愿每次进进vi会话时都启用不辨别巨细写的搜刮,那末在主目次中的.exrc文件中增加setignorecase行。
复合搜刮
在vi中,可使用/下令搜刮字符串,这必要以字面字符串或正则表达式的情势指定要婚配的形式。比方,要想在文件中搜刮单词echo,只需进进下令形式,输出/echo,然后按回车。这个下令会找到清单6所示文件的第3行的第一个单词。- #!/bin/ksh#echo“Starting”file=${1}echo${file}if[[${file}=1]];then((file=${file}+1))echo“Addingonegives”${file}fiecho“Ending”exit
复制代码 可使用复杂的正则表达式指定寻觅包括某一单词并且前面有另外一个单词的行。比方,要想寻觅包括字符串echo、前面有零个或更多字符、以后是字符串file的第一行,应当利用/echo.*file。在清单6所示的文件中,这个下令会找到第6行的第一个单词。
可是,只要这两个字符串呈现在统一行上,这个下令才以为是婚配的。假如但愿搜刮呈现在另外一个形式或字符串前面的某个形式或字符串,不论这两个形式或字符串是不是在统一行上,那末能够指定由分号(;)分开的两个搜刮下令,从而实行复合搜刮。比方,要想搜刮呈现在字符串{file}+1前面的字符串echo,应当利用/{file}+1/;/echo/。在清单6所示的文件中,这个下令会找到第10行的第一个单词。复合搜刮关于寻觅代码中呈现在另外一个下令前面的某个下令特别有效―比方,在设置某个变量以后挪用函数的中央。
重放搜刮形式
当在文件中搜刮要交换的形式时,可让vi把要婚配的任何形式保留在缓冲区中;然后,在实行交换时,能够用缓冲区援用号重放它们。***是把形式放在(和)之间,这会唆使vi把形式放在编号的缓冲区(1到9)中。在实行交换时,能够用缓冲区援用号1到9援用这些缓冲区。
比方,假定要在清单7所示的文件中搜刮以单词Martin开首的行并对每一个婚配增加前缀Mr和后缀Wicks,那末进进下令形式,输出vi下令:%s/^(Martin)/Mr1Wicks/g,然后按回车。- MartinisanITconsultant.Martinlikessnowboardingandmountainbiking.MartinhasworkedonUNIXsystemsforover15years.Martinalsoworkedformanyyearsbeforethatonmainframes.MartinlivesinLondon.~~~~:%s/^(Martin)/Mr1Wicks/g
复制代码 上面把这个下令分化开注释一下:
- :%s―唆使vi实行交换。
- /―形式分开符。
- ^(Martin)―寻觅以字符串Martin开首的行并把这个字符串保留在缓冲区1中。
- /―形式分开符。
- Mr1Wicks―把找到的字符串交换为字符串Mr,加上缓冲区1中的内容,再加上字符串Wicks。
- /―形式分开符。
- g―全局修正(即修正一切婚配的中央)
在搜刮和交换字符串中都可使用缓冲区援用。- MrMartinWicksisanITconsultant.Martinlikessnowboardingandmountainbiking.MartinhasworkedonUNIXsystemsforover15years.Martinalsoworkedformanyyearsbeforethatonmainframes.MrMartinWickslivesinLondon.~~~~:%s/^(Martin)/Mr1Wicks/g
复制代码 书签
可让vi在文件中的特定地位放上书签。***是按Escape键,再按M键,然后输出另外一个暗示书签援用的字母表字符。因而,最多能够有26个书签,分离名为a到z。要前往到上一书签,按Escape键,再按反撇号(`),然后输出书签援用字符。
比方,按Escape以后按M和A键,就会把以后游标地位保留在书签a中。在编纂会话中,今后但愿前往到这个游标地位时,只需按Escape,然后输出`A。可使用双反撇号(“)下令在以后书签和前一个书签之间切换。
查找、更新、查找下一个、反复
在vi编纂器中,最有效的搜刮/交换特征之一是查找与某个形式婚配的字符串,更新它,然后持续搜刮下一个婚配的字符串,然后选择是不是以不异体例更新它。这与Microsoft®Word中的查找下一个/交换功效很类似。您大概已晓得能够在vi中搜刮字符串形式,***是进进下令形式,输出/search_pattern(个中的search_pattern是字符串或正则表达式),然后按回车。如许做就会找到与指定的形式婚配的第一个字符串。在此以后,能够在找到的文本上实行任何操纵。比方,按Escape,再按C和W键,再输出更多文本,就会把找到的字符串交换为另外一个单词。
要想疾速地找到与形式婚配的下一个中央,应当按Escape,然后按N键。在找到下一个婚配时,可使用点号键(.)在这个地位反复比来的文本操纵,好比前一个示例中利用的修正单词(cw)操纵。然后,可使用这些键持续寻找其他婚配(n)并选择反复文本操纵(.),操纵体例与利用Word中的查找下一个/交换功效很类似。
切换巨细写
在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,endwfile,个中的start是以后文件中要保留的第一行,end是要保留的最初一行,w暗示但愿写到另外一个文件中(大概掩盖现有的文件),file是指定的部分要保留到的文件。关于最初一行,可使用$暗示文件的开端。能够在w前面利用两个年夜于号(>>)暗示但愿把内容附加到文件中而不是掩盖文件。清单12中的示例把第6到第9行(含)附加到文件/tmp/newfile中。- ##Internethosttable#::1localhost127.0.0.1localhostloghost192.168.0.6centos5192.168.0.10appserv192.168.0.11webserv192.168.0.12test192.168.0.5solaris10#AddedbyDHCP~~~:6,9w>>/tmp/newfile
复制代码 停止语
vi编纂器是一个极为壮大的工具,本文供应了一些技能和窍门,但愿可以匡助您更高效地编纂文件。请记着,vi另有更多不太为人所知的特征。祝事情兴奋!
转载:http://www.oschina.net/news/41807/10-interesting-vi-commands
欢迎大家来到仓酷云论坛! |
|