Linux操作系统文件编辑器vi周炯上海艾基信息技术有限公司Linux——文本编辑器vi•vi的基本操作•vi高级编辑命令•vi的设置§3.1进入vi•vi是一个较大的UNIX命令,在启动的时候也有它自己的选项和参数•基本语法:vi[-options][+[n]][file]•常用选项有:-r,-R–-r用于恢复系统突然崩溃时正在编辑的文件–-R用于以只读方式打开文件–+n用来指明进入vi后直接位于文件的第n行,如果不指定n,则位于最后一行§3.2vi的工作方式•vi一共有三种工作方式:命令方式、编辑方式和末行方式:命令方式插入方式行方式插入命令EscEsc命令执行完:一、命令方式•无论用户处于什么状态,按Esc键或组合键Ctrl+[就可以进入命令方式。当用户初始进入vi时,也处于这个状态。•用户在命令方式下可以输入各种合法的vi内部命令,这些命令不会回显,而且不需要回车就会被执行二、文本插入方式•在命令方式下使用某些命令会导致vi马上进入文本插入方式,这些命令包括:i,I,a,A,o,O等•在这种方式下用户的任何输入都被当作是文件的内容看待,并将其显示在屏幕上。三、最后行方式•行方式又称为最后行方式,通过在命令方式下键入冒号:可进入这个方式,在这种方式下vi会在屏幕的最后一行显示一个冒号并等待用户输入命令•行方式下用户输入的命令将回显在最后一行上,并且直到用户输入回车vi才会去执行它•命令执行完毕后,vi自动进入命令状态•或者在输入命令时敲Esc键或组合键Ctrl+[、或用退格键删除所有的输入之后再按一下退格键回到命令方式§3.3基本编辑命令•移动光标(cursormovement)–Bksp左移一个字符–Space右移一个字符–Enter,+下移一行–h左移一个字符–l右移一个字符–j下移一行–k上移一行§3.3基本编辑命令–[n]G跳到第n行–w,W跳到下一个词的词头–b,B跳到上一个词的词头–e,E跳到下一个词的词尾–^跳到行首(第一个非空字符)–[0]跳到行首–$跳到行尾§3.3基本编辑命令–Ctrl-u向下翻滚1/2屏–Ctrl-d向上翻滚1/2屏–Ctrl-f向下翻滚1屏–Ctrl-b向上翻滚1屏–Ctrl-n向下移动一行–Ctrl-p向上移动一行•上述命令(除[n]G外)的前面均可增加一个数字来控制移动的次数§3.3基本编辑命令•修改文本命令(modification)–[n]rchar用字符char代替光标处的字符,n指定字符char出现的次数。n缺省为1。–[n]Rtext用text的内容替换当前行n次。n缺省为1。命令执行完后处于插入方式,必须按Esc键或组合键Ctrl+[回到命令方式。–Cw,cw,cc替换一个词或替换到行尾§3.3基本编辑命令•编辑中的每一行正文都有自己的行号,用下列命令可以移动光标到指定行::[n]将光标移到第n行•命令模式下,可以规定命令操作的行号范围。数值用来指定绝对行号;字符“.”表示光标所在行的行号;字符符“$”表示正文最后一行的行号;简单的表达式,例如“.+5”表示当前行往下的第5行。例如::345将光标移到第345行§3.3基本编辑命令•在编辑模式下正确定位光标之后,可用以下命令切换到插入模式(Insert):–i在光标左侧输入正文–I在光标所在行的开头输入正文–a在光标右侧输入正文–A在光标所在行的末尾输入正文–o在光标所在行的下一行增添新行–O在光标所在行的上一行增添新行§3.3基本编辑命令•删除文本命令(delete)–x删除当前光标所在位置的字符–X删除光标前的字符–dd删除当前行–D删除从当前光标位置直到行尾的所有字符–dcursor_movement删除从当前光标位置直到cursor_movement参数指定的位置§3.3基本编辑命令•字符串搜索(search)–/[pattern]/[offset]CR–/[pattern]CR–?[pattern]?[offset]CR–?[pattern]CR–上述四个命令分别表示向下/向上搜索指定的正则表达式[pattern],并将光标停留在相对搜索结果距离为[offset]行处§3.3基本编辑命令–n重复命令,搜索得到使用结果后,可以重复命令n或N沿着相同或相反的方向重复上一次的搜索–fchar命令在当前行搜索指定的字符并将光标停在匹配字符上–tchar命令在当前行搜索指定的字符并将光标停在匹配字符的左边§3.3基本编辑命令•字符串替换(Substitute)–此命令要求先进入行方式–命令的语法为:[addr1,addr2|g]s/find_exp/repl_exp/[g|n][c]–上述命令表示在第addr1行到addr2行的范围内将字符串find_exp用repl_exp代替。–n表示替换每行的第n个匹配,c表示需要用户确认–g放在命令末尾,表示行全程,不加g,表示只对搜索字符串的首次出现进行替换;g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。§3.3基本编辑命令•重复前一命令:.•取消上一命令:u•重画屏幕:Ctrl-l•Ctrl_G命令显示当前编辑文本的状态,包括文本共有多少行、文件名以及目前光标停在多少行。•文件的保存:行方式下使用w命令§3.3基本编辑命令•退出vi:行方式下使用q命令将退出vi,如果文件作过改动但还没有保存,系统将作出提示并取消此次退出动作。行命令x相当于:wq命令。在命令方式下使用命令ZZ等效于:x命令。•如果由于读写权限或是更新方面的问题,导致vi拒绝执行保存文件或退出vi的命令,那么可以在命令后加一个!号表示强制执行。§3.4高级命令•文件操作命令–[addr1,addr2]w[!][filename]:将编辑缓冲区的addr1行到addr2行之间的内容写回到存储介质上的名为filename的文件中去,w后的!表示强制写入。–rfilename:将文件filename读入编辑缓冲区–efilename:编辑已存在于缓冲区中的、名为filename的文件–ffilename:将当前文件重命名为filename–f:打印当前文件名称和状态,如文件的行数、光标所在的行号等–上述命令属于行方式§3.4高级命令•文本的移动和复制–[addr1,addr2]m[addr3]–[addr1,addr2]t[addr3]–上述行方式下的命令分别表示将第addr1行至第addr2行之间的内容移动/拷贝到第addr3行的后面•行的合并–命令方式下的命令J将当前行的下面一行合并到当前行的末尾§3.4高级命令•缓冲区操作–vi提供36个编辑缓冲区,它们分别为a-z共26个命名缓冲区,1-9共9个删除缓冲区,另外还有一个未命名的缓冲区,一般称之为buffer0。–将文本内容送入缓冲区的命令为:[“char][n]y[cursormovement|y|w|l]•Char表示缓冲区的名字,小写表示覆盖写入,大写表示追加写入•n表示重复次数•cursormovement表示想要写入缓冲区的文本的范围,从光标的当前位置算起。•y表示以行为单位•w表示以词为单位•l表示以字符为单位–从缓冲区中提取其内容并将其插入在当前文本的命令为:[“char]p|P•P表示放在当前位置之前,p表示放在当前位置之后§3.4高级命令•在vi内使用shell–用户在运行vi的过程中不用推出vi就可以运行任何UNIX命令::!unix_cmdsCR•在unix_cmds参数中,可以使用%作为当前文件名的缩写,用#作为上次编辑文件的缩写,用!作为上次命令的缩写§3.4高级命令•使用自定义的缩写–:abbr|abstr1str2命令用用户自定义的字符串str1来代替字符串str2–:unab|unastr1取消缩写str1–上述四个命令都是行方式下的命令§3.4高级命令•宏–:mapkeycmds_list•此时key必须是一个单独的字母。或是一个Ctrl加上一个字母•此时定义的是宏命令–:map!keystring•此时key必须是一个单独的字母。或是一个Ctrl加上一个字母•此时定义的是宏字符串,用于文本输入方式–:unmapkey将取消key的宏定义§3.4高级命令–要注意的是在输入Ctrl+key的转义序列时必须先按下下列组合键:Ctrl-v。–如果cmds_list是行方式下的命令,那么在其末尾必须加上一个回车,输入方法为先输入Ctrl-v,然后输入Ctrl-m。Ctrl-m代表回车。§3.5vi的配置•vi的配置共有三种方法,–一种是在运行vi时使用行命令set来设置;–一种是使用EXINIT环境变量;–最后一种是使用用户主目录下的.exrc文件。•vi的显示是输出到终端上的,所以终端的类型会对vi的显示造成影响。–终端类型设置是使用TERM环境变量•(ansi,vt100):$TERM=ansi;export$TERM一、行方式下的设置•为控制不同的编辑功能,vi提供了很多内部选项。在行方式下使用命令set可以显示和修改vi的各种内部环境变量。•基本语法::setargument[=value]一、行方式下的设置•命令set的参数及其功能如下:–all列出所有选项设置的情况–term设置终端类型–ignorecase在搜索中忽略大小写–list显示制表符(^I)和行尾标志(^M)–number显示行号–report显示由面向行的命令修改过的行数–ruler在屏幕底部显示光标所在行、列的位置–terse显示简短的告警信息–warn显示简短的未保存告警–nomagic取消元字符在搜索字符串中的特殊性–nowrapscan搜索时不回绕–mesg允许vi显示其他用户用write写到自己终端上的信息–shiftwidth指定自动缩进的制表位–autoindent自动缩进–directory指定编辑缓冲区的路径–showmode显示文本插入方式–window设置显示的文本行数–mk将选项保存在当前目录的.exrc文件中–tabstop设置按Tab键跳过的空格数。例如:settabstop=n,n默认值为8二、永久设置方式•上面所说的:set命令在退出vi后就失效了,下次进入vi还需要重新设置•我们可以将上述:set命令写在一个名为~/.exrc的文件中,这样每次进入vi就会自动执行。•或者将需要用到的:set命令保存在EXINIT环境变量中。§3.6vim和gvim的高级特色•vim代表ViIMproved,如同其名称所暗示的那样,vim作为标准UNIX系统vi编辑器的提高版而存在。vim除提供和vi编辑器一样强大的功能外,还提供有多级恢复、命令行历史以及命令及文件名补全等功能。•gvim是vi的XWindow版本,该版本支持鼠标选中,一些高级光标移动功能,并且带有菜单和工具按钮。§3.6小结•vi必须经常使用才能够掌握•另外还有一些高级的操作方法,有兴趣的同学可以参考vi的联机手册QUESTIONSANSWERS练习•编辑一个文件–光标移动–插入、修改、删除–保存,推出•编辑文件/etc/bashrc–[\u@\h\W]替换成[\u@\h:\w]–保存