Linux简单使用vi编辑器
vi很常用,这里记录一下简单的用法,以利于未来用到或忘记时快速查阅。vi的模式命令模式(commandmode):执行vi命令后默认进入命令模式。插入模式(insertmode):在命令模式按i键,进入插入模式。按ESC键退出插入模式返回到命令模式。末行模式(lastlinemode):在命令模式按:键,进入末行模式。退出末行模式返回命令模式有两种方法,方法1是按ESC键返回命令模式,方法2是输入末行命令按enter键执行,等末行命令执行结束,就自动返回命令模式。
每种模式都有各自的命令,命令模式有命令模式的命令,插入模式有插入模式的命令,末行模式有末行模式的命令。保存文件(save;write)、退出vi编辑器(quit)
以下命令需在末行模式输入和执行:w保存文件,把文件内容写入到当前文件。:wq先保存后退出vi::q退出vi:q!强制退出vi:rfilename把其他路径下的文件内容导入到当前文件光标所在行的下面。:wfilename把当前文件的内容写入到其他的文件里,就是另存为操作。执行这个命令时,当前文件内容的修改不会写入到当前文件(原始文件)。命令模式进入插入模式的方法按i键从光标所在位置的左侧(前面),进入插入模式按a键从光标所在位置的右侧(后面),插入插入模式按A键把光标移动到光标所在行的尾部,进入插入模式按o键在光标所在行的下面插入新行,把光标移动到新行的行首,进入插入模式按O键在光标所在行的下面插入新行,把光标移动到新行的行首,进入插入模式移动光标
以下4个键在命令模式和插入模式都可以使用按Home键可以把光标移动到光标所在行行首。按End键可以把光标移动到光标所在行行尾。按PgUp键可以往上翻页,实现光标往上快速移动。按PgDn键可以往下翻页,实现光标往下快速移动。
以下命令需在命令模式输入和执行
行内移动光标0功能与相同。把光标移动到光标所在行的行首。把光标移动到光标所在行的行尾。N把光标往后移动N个字符。(好像可以跨行)N把光标往前移动N个字符。(好像可以跨行)b把光标移动到当前光标所在位置的前一个单词的首字母。w把光标移动到当前光标所在位置的后一个单词的首字母。e把光标移动到当前光标所在位置的后一个单词的尾字母。5b往前移动5个单词。5w往后移动5个单词。5e往后移动5个单词。Ctrl左后方向键
行间移动光标gg把光标移动到第一行。是1G的快捷方式。G把光标移动到最后一行。NG把光标移动到第N行。1G就是移动到第1行。N从光标所在行开始把光标往后(下)移动N行。H(high)把光标移动到屏幕上面M(middle)把光标移动到屏幕中间L(low)把光标移动到屏幕下面
其他移动光标命令h左移光标l右移光标k上移光标j下移光标ctrlf光标向前翻整页ctrlb光标向后翻整页ctrld光标向前翻半页ctrlu光标向后翻半页复制(copy)
以下命令需在命令模式输入和执行yy命令复制光标所在行。y命令复制光标所在位置至行首的全部字符。y命令复制光标所在位置至行尾的全部字符。5yy命令从光标所在行开始往下复制5行。yw命令复制光标所在位置至当前单词尾部的全部字符。
在末行模式输入以下命令执行:s,ey复制第s行至第e行之间的所有行,如:50,100y复制第50行至100行之间的所有行。粘贴(paste)
以下命令需在命令模式输入和执行P命令在光标所在位置前面粘贴p命令在光标所在位置后面粘贴。5p命令在光标所在位置往后粘贴5次删除(delete)
以下命令需在命令模式输入和执行dd命令删除光标所在行d命令删除光标所在位置至行首的全部字符。d命令删除光标所在位置至行尾的全部字符。dw命令删除光标所在位置至当前单词尾部的全部字符(含单词尾部的空格)。de命令删除光标所在位置至当前单词尾部的全部字符(不含单词尾部的空格)x命令删除光标所在位置后面的单个字符。J(大写字母)命令删除光标所在行行尾的换行符,等同于合并当前行和下一行的内容。5dd命令从光标所在行开始往下删除5行。5dw命令删除当前光标所在位置后面的共5个单词(含尾部的空格)。5de命令删除当前光标所在位置后面的共5个单词(不含尾部的空格)。5x命令删除当前光标所在位置后面的共5个字符。5J命令从光标所在行开始往下合并5行(通过删除每行行尾的换行符)。
在末行模式输入以下命令执行:d删除光标所在行。:s,ed删除第s行至第e行之间的全部行。:1,。d删除第一行至光标所在行的全部行。:。,d删除光标所在行至最后一行的全部行。:1,d删除第一行至最后一行的全部行。慎用。:g。d删除第一行至最后一行的全部行。与上面的:1,d功能相同。慎用。:gd删除全部空白行。这个命令非常有用,删除文件空白行是使用频率较高的操作,使用tr命令和sed命令也可以实现。
删除文件空白行执行:gd前
删除文件空白行执行:gd后查找(find;search)
以下命令需在命令模式输入和执行待找字符串往下查找,按n查找下一个,按N查找上一个。?待找字符串往上查找,按n查找下一个,按N查找上一个。替换(replace;substitute)
查找和替换的命令语法:〔range〕soldnewgc。查找和替换的范围有:行内(单行)查找和替换,行间(多行)查找和替换,整个文件内(从第一行到最后一行的全部行)查找和替换。range,指范围,指在哪一行或哪几行进行查找和替换。range是可以缺少的。缺少range时,会在光标所在行进行查找和替换操作。g指global,指全局查找和替换,找到目标字符串在每一行的每一个位置,进行替换。c指comfirm,指确认是否执行查找和替换操作。
行内(单行)查找和替换:soldnew在光标所在行执行一次查找和替换。何为行内一次查找和替换?从行首开始查找目标字符串,找到了它第一次出现的位置,执行替换操作,然后结束,不再往下进行查找和替换。:soldnewg在光标所在行执行全部(全局)查找和替换。
行间(多行)查找和替换:,soldnew在行间的每一行执行一次查找和替换。:,soldnewg(c)在行间的每一行执行全部(全局)查找和替换。:。,soldnew在光标所在行与最后一行之间的每一行执行一次查找和替换。:。,soldnewg在光标所在行与最后一行之间的每一行执行全部(全局)查找和替换。
在整个文件内(第一行与最后一行之间)进行查找和替换:soldnew在第一行和最后一行之间的每一行执行一次查找和替换。:soldnewg(c)在第一行和最后一行之间的每一行执行全部(全局)查找和替换。指百分百,就是指查找和替换的范围为整个文件,为第一行到最后一行的全部行。
查找和替换的例子:s(。)thinkdecideact:1g在每行行首插入thinkdecideact:这个字符串。其中,(。)匹配整行,1是反向引用(backreference),指前面正则里第一个分组匹配到的内容,即一整行数据。:s(。)1(thinkdecideact)g在每行行尾插入(thinkdecideact)这个字符串。:s(life)Goodquote:1g在以life开头的每一行行首添加Goodqutoe:这个字符串。:sbestgn统计整个文件里best这个字符串在整个文件中出现的次数。
查找和替换例子原始文件内容
查找和替换例子在每行行首添加一个字符串
查找和替换例子在每行行尾添加一个字符串
查找和替换例子在以life开头的每一行添加一个字符串取消(undo;cancel)
命令模式下输入以下命令执行u命令取消最近一次操作,并恢复操作结果;可以多次使用u命令,不断往后取消恢复之前的结果(往后移动)。U命令取消对光标所在行进行的全部操作。CtrlR组合键恢复u命令取消的操作(往前移动)。(R是recover,restore之意)什么是当前行?什么是当前单词?
光标所在行就是当前行。光标所在的单词就是当前单词。