您好,欢迎访问三七文档
第3章全屏幕编辑程序vi3.1vi的启动方法3.2vi的选项3.3vi的工作方式3.4vi的编辑命令早期的UNIX提供的编辑器是行编辑ed。UNIX的全屏幕编辑器vi,现在所有的UNIX版本都支持。目前,行编辑ed还经常用于Shell脚本程序中,在脚本程序中,根据用户的输入信息修改一个文本文件的内容。行编辑程序ed的显示是面向行的,对终端的类型和特性没有任何的特殊要求和限制,ed程序本身也比较简单。vi可以交互式编辑文本文件,编辑是面向屏幕的,终端的类型设置必须正确,否则无法正常工作。由于vi在所有UNIX之间通用,也可以应用于各种各样的终端,占用系统资源很少,所以vi仍然被广泛使用。用法:vifilename例如:viabc.c,启动vi编辑文件abc.c。vi有搜索命令和卷动功能,可以用来浏览文本文件,比more,less等更方便,但是应当避免在浏览时对文件无意中做出错误的修改。可以使用view代替vi进入编辑程序,就不允许修改文件内容。3.1vi的启动方法vi有40多个选项控制vi的运行。1.用.exrc文件控制vi一启动后就自动读取用户自己主目录(HomeDirectory)下的文件.exrc,获取用户自设定的vi选项,未指定的选项按默认值处理。如:建立文件.exrc,其中含有如下两行:setnumbersetshowmode其中第一条命令使得vi在列出每一行时,在左边列出行号。第二条命令使得vi在屏幕右下角标志出当前是否处于输入状态。3.2vi的选项2.在vi中使用set命令例::setnumber在列出每一行时,左边列出行号:setshowmode在屏幕右下角标志出当前是否处于输入状态:setnonumber在列出每一行时,在左边不列出行号:setnoshowmode在屏幕右下角不标志出当前是否处于输入状态:setall列出所有开关的当前状态一般的,设置选项和取消选项的命令格式分别为(其中option为选项名):setoption:setnooptionvi的工作方式分命令方式和输入方式。vi启动后就进入命令方式,参见图3-1。图3-1vi的工作方式转换3.3vi的工作方式处于命令方式时,用户键入的内容被当作vi的命令来解释,一般处于命令方式下按键无回显(以冒号打头的命令和查找命令除外)。编辑命令i,a等,可以从命令方式转到输入方式。处于输入方式时,用户键入的所有内容全部作为输入的正文内容,用户可以输入多行,每输入完一行后按回车键转入下一行,正文输入时有回显。输入完毕,按键盘左上角的Esc键,返回到命令方式。当vi处于命令状态时,用户的按键不回显,被解释成编辑命令,vi大约有100多个编辑命令。下面介绍的vi命令子集,足可以完成一般的编辑任务。3.4vi的编辑命令命令i,在当前光标处插入(insert)正文段,直至按Esc键。在命令方式下,按下i键后,进入输入方式。从此以后,输入的文本在屏幕上回显,输入完一整行后,按下Enter键,继续输入下一行。输入结束后,按Esc键,退出输入方式,回到命令方式。回到命令方式之后,按键信息不再回显,所有的按键被解释为命令。许多传统的UNIX中,vi必须首先按下Esc键退出输入模式之后再移动光标到其他行,修改后,移动光标回来,再按下i命令(或者a,o,O)重新进入输入方式。在当前输入行的错误修正,使用Backspace键,不需要退出输入方式。3.4.1正文插入命令除了i命令外,在当前光标后追加(append)正文段的命令a,也可以进入输入模式,直至按Esc键。命令o,在当前行之下插入新行(open),进入输入模式,直至按Esc键。大写字母O命令,在当前行之上插入新行(open),进入输入模式,直至按Esc键。1.单字符移动h光标左移一列j光标下移一行k光标上移一行l光标右移一列在vi中有许多命令可以在命令前加上一个整数,标志这个命令连续执行多少遍,例:5h光标左移5列6j光标下移6行23k光标上移23行10l光标右移10列3.4.2光标移动命令有的终端可以直接使用键盘上的箭头按键代替这四个字母,更便于用户使用。vi被设计成对终端特性的依赖性最小,所以,不依赖于终端的功能键,仅使用键盘的字母、数字和符号键vi就能完成编辑工作。2.翻页Ctrl+B键:向后翻页(Backward)Ctrl+F键:向前翻页(Forward)Ctrl+U键:向上翻半页(Up)Ctrl+D键:向下翻半页(Down)在vi中,把向文件尾方向定义为“向前”,向文件头方向定义为“向后”,这与许多人的习惯不同。在PC上的UNIX允许用PgDn键代替Ctrl+F键,用PgUp键代替Ctrl+B。也可以使用下面的键:6Ctrl+F键:向前翻6页15Ctrl+B键:向后翻15页3.将光标移至当前行首^4.将光标移至当前行尾$5.移到右一个单词wW,移到左一个单词bBw,b与W,B的区别是它们对“单词”的定义不同。小写命令的命令w和b,以非字母、数字、下划线之外的所有字符作为“单词”分界符。大写命令的命令W和B,仅以空白符(空格或者制表符)作为“单词”分界符。同前述其他命令类似,也可以使用类似6w,3W,5b,10B命令。6.移到指定的行使用这种方法可以立即将光标定位到需要修改的行。例::476将光标定位于第476行:1将光标定位于第1行(文件首):$将光标定位于文件尾:$-10将光标定位于文件倒数第10行在描述行号时,可以使用句点(.)代表当前行号,使用$代表最后一行的行号,而且可以使用整数加减法,如最后一例。7.括号配对命令%先把光标移到一个大括号(或括号,或方括号)上,按%键,则光标自动定位到与它配对的那一个括号,对编写和检查C语言的源程序非常有用。vi允许设置以单个英文字母命名的最多26个标记(mark),许多编辑器把这种功能叫“书签(bookmark)”。vi的书签记忆了一个行号。设置书签的命令是m。例如:顺序按下两个键m和a,尽管终端上没什么特别的显示信息,但是,vi已经将当前行号记为名字为a的书签。设置的所有书签,在vi退出后,不再保存。vi许多编辑命令可以使用命名的书签,将光标移动到指定书签处的命令是'(单引号)。例:'a连续按下单引号和字母a,光标会移动到书签a处'e光标移动到书签e处3.4.3设置书签1.删除当前字符的命令:x类似的,命令5x删除从当前光标开始的5个字符。2.删除当前行的命令:dd类似的,命令3dd删除从当前行开始的3行。3.与光标移动命令相关的删除命令d'e从当前光标处删除到书签e处d$从当前光标处删除到行尾d^从当前光标处删除到行首dw删除一个单词d%将光标移动到一个括号字符上,删除和它配对的括号括起的段落3.4.4删除1.替换光标处字符的命令r例:ra命令将当前光标处字符替换为a。如果希望将当前光标处开始的三个字符依次替换为abc,则需要按命令rarbrc。2.替换多个字符的命令R例:命令Rabcdef,然后按Esc键。该命令把从当前光标开始的字符依次替换为abcdef,用Esc键来结束多字符替换命令。这类似于以“覆盖”(overwrite)方式进入编辑状态。3.4.5字符替换1.命令u取消上一次的编辑操作。例如:误删除了一段正文,用u命令可以恢复到删除前的状态(undo)。vi的取消操作,只能回退一次。许多新版本的vi对这个问题作了改进。2.命令.重复上一次的编辑操作。按句点键,可以重复上一次的编辑操作。例如:按3dd命令删除了3行,然后按句点键就再删除3行,如果接着连续按句点(·.)键,则每按一次删除3行。3.4.6取消和重复(1)存盘退出ZZ,存盘退出:wq(2)存盘不退出:w(3)不存盘退出:q!(4)读入一个文件插入到当前行之下:ra.c(5)写文件把第50行至文件尾的内容写到文件junk中:50,$wjunk如果文件junk事先已经存在,使用下述命令强制把它覆盖掉:50,$w!junk3.4.7文件命令如果编辑了文件之后,无法存盘(例如:文件没有写权限),那么可以用:wfile1将当前编辑好的文件内容存到另一个文件中。1.删除命令:d用法为::l1,l2d,删除第l1~l2行。例如::10,50d删除第10~50行:1,.d删除文件首至当前行的部分2.复制命令:co用法为::l1,l2col3,将第l1~l2行复制到第l3行之下。例如::5,10co56复制第5~10行到第56行之下3.4.8段落的删除、复制和移动3.移动命令:m用法为::l1,l2ml3,将第l1~l2行移动到第l3行之下。例如::8,34m78移动第8~34行到第78行之下行号描述时除了可以使用句点代表当前行,$代表最后一行,还可以使用“书签”,例如:下面的命令中'e代表书签e的行号。:'e,.dvi有一个通用的缓冲区和用单个的英文字母命名的26个有名缓冲区,用于保留一些文本。前面介绍的删除命令,vi会在删除了这些信息之后,自动把这些信息保留在通用缓冲区中。下面的命令都会执行两个操作:删除信息和将删除的信息放置到通用缓冲区中。dd删除当前行3dd删除当前行开始的3行d'e删除从当前光标处到书签e处(书签e需要事先用命令me设置好)d$删除从当前光标处到行尾3.4.9剪贴板d^删除从当前光标处到行首dw删除一个单词d%首先将光标定位到一个括号(或方括号、大括号)字符上,删除从此开始到和它配对的括号处:1,.d删除文件首到当前行的段落将缓冲区中保留的信息粘贴到光标处,使用p命令(put或paste)。除了上述的d命令之外,还有“抽取(yank)”命令y,它仅仅把指定的信息复制到通用缓冲区,但不删除它们。用法和d命令类似。yy当前行3yy当前行开始的3行y'e从当前光标处到书签e处(书签e需要事先用命令me设置好)y$从当前光标处到行尾y^从当前光标处到行首yw一个单词y%首先将光标定位到一个括号字符上,从此开始到和它配对的括号处:1,.y文件首到当前行的段落在信息保留到缓冲区之后,就可以使用p命令,将它们粘贴到文件合适的位置。vi除了使用这个默认的缓冲区之外,还有26个用单个英文字母命名的有名字的缓冲区。与缓冲区有关的3个命令是d,y,p,在使用有名字缓冲区时,在这些命令前加两个字符的前缀,一个字符是双引号,一个字符是英文字母代表的缓冲区名字。例如:a3dd删除当前行开始的3行,并把信息保留到a缓冲区中by'e复制当前光标到书签e处内容到b缓冲区中ky%光标定位在一个括号字符上,复制从此开始到和它配对的括号处的段落到缓冲区k中kp粘贴出缓冲区k中的内容1.两行合并J(大写字母,Join)把当前行下面的行合并到当前行。2.刷新屏幕显示Ctrl+L键在阅读完“突然”出现的信息后,按Ctrl+L键,恢复vi原先的屏幕显示。在more命令中也介绍过类似的功能。3.状态显示Ctrl+G键在屏幕最下面一行列出正在编辑的文件的名字、总行数、当前行号、文件是否被修改过等信息。3.4.10其他命令在vi的模式查找命令中,使用“正则表达式”来描述一个字符串模式。命令格式为:/模式例:/[0-9][0-9]*从文件当前位置开始向下查找能与正则表达式[0-9][0-9]*匹配的字符串,找到后光标将定位于该处。继续查找命令:n和N。小写字母n键,向下继续查找下一个(next),查到文件尾后,自动折到文件首继续向下查找(循环搜索)。大写字母N,向上继续查找下一个,查到文件头后自动折到文件尾继续向上查找(循环搜索)。3.4.11模式查找1.基本用法在vi的模式替换命令(substitution)中,也使用“正则表达式”来描述一个字符串模式。命令格式为::行号,行号s/模式/替换字符串/g其中,模式描述使用正则表达式。替换命令结束后在屏幕的最下面的状态行显示替换次数。3.4.12模式替换【例3-1】将abc字符串替换为xyz。:1,50s/abc/xyz/将第1~50行的字符串abc换为xyz,如果同一行内有多个abc字符串,则只替换第一个。:1,50s/abc/xyz/g将第1~50行的字符串abc换为xyz,如果同
本文标题:全屏幕编辑程序vi
链接地址:https://www.777doc.com/doc-7278229 .html