1 文本编辑
Linux系统中的文本编辑器,一般分为行编辑器(如ed、ex、edit)和屏幕编辑器(如vi)。Vi(Visual Interface),具有行编辑和全屏幕编辑的特点。Vim(vi improved)是vi的增强版,与vi向上兼容
2 vi命令
2.1 vi编辑器的工作方式
三种工作方式:命令方式、输入方式、ex转义方式
1) 命令方式:在shell界面输入vi即可进入,键盘输入a(append)为附加命令,i(insert)为插入命令,x为删除字符命令,即键盘输入的任何字符被作为编辑命令来解释
2) 输入方式:通过vi的插入命令(i)、附加命令(a)、打开命令(o)、替换命令(s)、修改命令(c)、取代命令(r)可以从命令方式进入输入方式。此时键盘输入的所有字符都会被插入到当前在编辑的缓冲区中。由输入方式回到命令方式的办法是按esc键,已在命令方式下再按esc键就会发出“嘟嘟”声,所以esc可以多按几次
3) ex转义方式:ex中,命令是以Enter键结束的命令行。为使用ex转义方式,可输入一个冒号(:)作为ex提示符,冒号出现在状态行(常是屏幕最下一行)。通过中断键(常是Del键)可终止正在执行的命令。多数文件管理命令都是在ex转义方式下执行的。如输入:1, $ s/I/i/g执行的是从文件第一行至文件末尾($)将大写I全部替换成小写i
2.2 vi的进入与退出
1)进入vi:通过vi 文件名的方式即可进入vi编辑文件
2)退出vi:有四种方式:即 :wq(把编辑缓冲区的内容写到指定文件中,并退出编辑器)、:ZZ(仅当对所编辑的内容做过修改时,才将缓冲区的内容写到指定文件上)、:x(与:ZZ功能相同)、:q!(强行退出vi,不把缓冲区内容写到文件中)
2.3 vi的输入
1)插入命令。小写i命令是指输入的内容都插入在光标位置之前,光标后的文本相应向后移动,如按下Enter键即会插入新的一行或者换行。大写I命令是指光标会自动移到光标所在行行首(该行的第一个非空白字符)插入新增文本,同时光标后的文本相应向后移动
2)附加命令。a命令是输入的字符都插入光标之后,A命令是光标自动移到该行行尾,在当前行的行尾添加输入的文本
3)打开命令。o命令是在当前行的下面开辟一行,随后输入的文本就插入到该行上。O命令则是在当前行的上面开辟一行,随后输入的文本就插入到该行上。
4)输入方式下光标的移动方式:可以通过方向键,Backspace键可以可以将从当前行新插入的字符串上回退一个字符,并删除此前刚输入的最后一个字符。Ctr+U键可以将光标回退到刚插入字符串的第一个字符,并删除给字符串,重新开始插入。Ctr+W键可将光标移到最后插入单词的首字符,并删除该单词。Ctrl+T键,当设置自动缩进时,可实现插入缩进所对应的空格,如光标在字符中间,则会补充插入空格
2.4 vi的命令方式下的光标移动
向右移动可以按:左向键, l 或者Space键可实现向右移动n个字符;向左移动可以按:右向键, h 或者Backspace键可实现向右移动n个字符;向上移动可以按:-、上向键, k 或者Ctrl+P键可实现向上移动n个字符;向下移动可以按:+、下向键, j 或者Ctrl+N键可实现向上移动n个字符(在上述命令前如先输入一个数字n,则光标对应移动n)
输入0移动到当前行第一个字符,而输入^则移到当前行第一关非空白符;按$则移动至行尾;[行号] G可将光标移动到行号指定的开头(通过Ctrl+G可以获得某一行行号);输入[列号] | 可将光标移至当前行的指定列上;w W命令是将光标向前移至下一词的开头;b B命令是将光标向后退至上一词的开头;e E是将光标移至词尾;( )是分别将光标移至上一个句子和下一个句子的开头;[位移] H是将光标移至屏幕左上角;M将光标移至中间行的开头;[位移] L是将光标移至屏幕底行
2.5 文本修改
删除:x(删除光标所在字符,如前面先给一个数值n,则会向右删除n个字符(包含光标所在字符))、X(删除光标前面那个字符)、dd(删除光标所在的整行)、D(从光标位置删除至行尾),d…(d与光标移动命令的组合就删除从光标位置到由光标移动限定的文本对象的末尾,向前(右)删除会删除光标坐在字符,向后(左)则不包括。举例:d3l向右删除3个字符(含光标所在字符),d0从光标位置删至行首(不含光标所在字符)),点(.)为重复命令,重复实现最近一次使用的插入命令或者删除命令;
复原:u是取消上一次的删除或者插入操作,恢复到上次操作前的状态;而U是直接恢复到被编辑前的状态,不管它中间被编辑过几次
修改:等价于用删除命令删除老文本,再用i命令插入新文本。格式:c+光标移动命令+新文本+esc键;C+新文本+Esc键(C是直接从光标位置删除到行尾);cc是影响到整行
取代:r R . 类似修改用法,只不过功能从修改变成了替换;[数字n] s是指输入的n个字符替换包含光标在内的往后n个字符,S则是替换整行
合并:[数字n] J将当前行与其他n行合并成一行
文本移动:一般格式>光标移动命令(右移)或者<光标移动命令(左移);而>>8是当前行右移8个空格,<<8是当前行左移8个空格
过滤:!+光标移动命令+linux命令,最后按Enter键。实现把当前行与光标移动指定行之间的内容经过Linux命令加工后,替换原来那部分正文
Vi 文件1 文件2,时,完成第一个编辑后(:w),输入:n就进入第二个文件;如果想跳过文件1,可输入命令:e 文件2
2.6 字符串搜索
向前检索:/模式+Enter键或/模式/位移+Enter键
向后检索:?模式+Enter键或?模式?位移+Enter键
重复检索:n重复上一个检索命令,检索方向一致;N重复上一个检索命令,检索方向相反
查找字符:f 字符(向前查找)、F 字符(向后查找)、(分号);(重复上一次查找动作,方向一致)、(逗号),(重复上一次查找动作,方向一致)
光标靠近:t 字符(向前靠近)、T 字符(向后靠近)
置标记:m字符(即标记字符)、(单引号)‘字符(光标移至置标记行的开头)、(倒引号)`字符(光标移至置该行精确标记位置)
全局替换:一般格式:g /模式 / 命令表,其中s /模式/替代文本/选项(表示与“模式”匹配的第一个字符串“替代文本”取代,若选项是g则说明所有匹配模式的字符串都被替换),如是c则表示替换前需要用户确认
3 ex命令
3.1 命令定位
所有的ex命令都可以用Enter键或者中断键中止。
命令定位:.是表示当前行,以及对对应行的前述标记,地址间以分号隔开
3.2 常用命令
1)e命令:e 文件名(编辑指定文件名的文件)
2)w命令:w 文件名(缓冲区内容修改后写到文件),w>>文件名(追加到文件末尾)、W !文件名(跳过写命令的常规检查,写到文件中)、 W !命令(将指定的各行写入指定命令
3)r命令:r 文件名(将文件内容读到缓存区)、r ! 命令(把命令的输出读到缓冲区指定行之后)
4)q命令:q!(修改后不保存退出),wq(修改后保存退出)、wq !文件名(忽略w命令前做的检查,修改后保存退出),x 文件名(如文件已修改但未写出去,则该命令就把缓冲区内容写出去,再退出vi;否则直接退出)