第2章vi编辑器§1简介§2基本操作§1简介Linux系统提供了一个完整的编辑器家族行编辑器:ed,ex,edit全屏幕编辑器:vi,emacsvi(visualinterface)汇集了行编辑器和全屏幕编辑器的特点只是一个文本编辑程序,而不是一个排版程序§1简介vi的三种工作模式CommandMode(命令模式)执行vi后的缺省模式用户可输入合法的vi命令,用于控制光标的移动、删除字符和段落复制命令有大小写之区分不管处于何种模式,只要按下Esc键,即可转入该模式§1简介InsertMode(插入模式)在命令模式下输入a、i、o、c、r、s等都可以进入插入模式用于新增文字和修改文字,此时用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上按下Esc键即可回到CommandMode§1简介LastLineMode(末行模式,ex转义模式)在命令模式下,按“:”键即可进入该模式,此时在窗口最后一行显示“:”作为提示符用于保存文件、退出vi、打开文档及其它设置命令有大小写之分§1简介§2基本操作vi的启动方式vi文件名如果文件不存在,将建立此文件;如果文件存在,则显示vi采用此种方式,需在退出vi时输入文件名输入命令vi后,便进入全屏幕编辑环境,光标定位在屏幕第1行第1列的位置,此时的状态为命令模式§2基本操作退出vi连按两次Z键:w存盘但并不退出:q退出:wq存盘并退出:w!强制存盘:q!强制退出,并放弃刚才编辑的内容:x作用同命令模式下的zz§2基本操作例vifile.c若文件file.c不存在,则屏幕看起来大致是这样:_~~~~~~~“file.c”§2基本操作此时按下字母i则进入插入模式,屏幕如下:_~~~~~~~--insert--§2基本操作输入完成,按下字符:则进入末行模式,屏幕如下:abfjvnv_~~~~~~~:§2基本操作-命令模式下常用命令输入文件内容(进入插入模式)附加(append)a从光标所在位置后面开始新增内容A从光标所在行的末尾开始新增内容插入(insert)i从光标所在位置前面开始插入内容I从光标所在行的第一个非空白字符前面开始插入资料打开(open)o在光标所在行下新增一行并进入插入模式O在光标所在行上新增一行并进入插入模式§2基本操作-命令模式下常用命令光标定位h左移一个字符、l右移一个字符、j下移一行、k上移一行w,W移至下一个字的开头b,B移至前一个字的开头e,E移至下一个字的末尾^、$、0(零)移至本行第一个非空字符、行尾、行首H、M、L至当前窗口的第一行、中间行、最后一行)、(至下一行的第一个字母、上一行的第一个字母}、{至该段落的最后一个字母、该段落的第一个字母§2基本操作-命令模式下常用命令光标定位(续)nH、nL将光标移到屏幕的第n行、倒数第n行Ctrl+d向下半页;Ctrl+f向下一页;Ctrl+u向上半页;Ctrl+b向上一页n-减号移动到上一行的第一个非空白字符,前面加上数字可以将光标上移n行n+加号移动到下一行的第一个非空白字符,前面加上数字可以将光标下移n行注:此处n为数字§2基本操作-命令模式下常用命令删除x删除光标所在位置的字符X删除光标前面的一个字符s删除光标所在位置的字符,并进入插入模式S删除光标所在的行,并进入插入模式dd删除光标所在的行D从光标位置开始删除到行尾d与光标移动命令的组合,例d0、d3l§2基本操作-命令模式下常用命令修改r修改光标所在字符,r后接着要修改的字符,如rc,用字符“c”替换光标所指向的当前字符R进入替换状态,新增内容会覆盖原先内容,直到按Esc键回到命令模式下为止cc修改光标所在行C修改从光标位置到该行末尾的内容c与光标移动命令的组合§2基本操作-命令模式下常用命令复原u恢复光标所在行的所有修改U恢复刚才被修改的文本,重复上一次命令的操作重复.重复实现刚才的插入命令或删除命令§2基本操作-命令模式下常用命令复制和移动yy复制当前行到内存缓冲区nyy复制n行内容到内存缓冲区y与光标移动的组合p将缓冲区的内容粘贴到光标的后面P将缓冲区的内容粘贴到光标的前面另:在末行模式下实现移动:n1,n2mn3把n1到n2行内容搬到第n3行后§2基本操作-命令模式下常用命令搜索字符串/pattern移至下一个包含pattern的行?pattern移至上一个包含pattern的行/pattern/+n移至下一个pattern所在行后的第n行?pattern?-n移至上一个pattern所在行前的第n行/往下重复查找;?往上重复查找n在同一方向重复查找;N在相反方向重复查找注:此处pattern为你想要搜索的字符串*.$^[]{}\/包含在查找字符串中,要用转义字符“\”§2基本操作-末行模式下常用命令字符串的替换:s/str1/str2/用str2替换行中首次出现的串str1:s/str1/str2/g用str2替换行中所有出现的str1:.,$s/str1/str2/g用str2替换正文当前行到末尾所有出现的str1:1,$s/str1/str2/g用str2替换正文中所有出现的str1:g/str1/s//str2/g功能同上注:此处str1、str2为你想要替换的字符串§2基本操作-末行模式下常用命令存盘、退出(同前)编辑多个文件1)vifile1file2…2):n编辑下一个文件3):efilename编辑指定文件显示行号:setnu显示行号:setnonu不显示行号:setautoindent设置正文的自动缩进