1、vi编辑器的工作模式
■ 命令模式:启动vi编辑器后默认进入命令模式。该模式中主要完成光标移动、字符串查找,以及删 除、复制、粘贴文件内容等相关操作
■ 输入模式:该模式中主要的操作就是录入文件内容,可以对文本文件正文进行修改或者添加新的内 容。处于输入模式时,vi编辑器的最后一行会出现
“—INSERT--”的状态提示信息。
■ 末行模式:该模式中可以设置vi编辑环境、保存文件、退出编辑器,以及对文件内容进行查找、替换 等操作。处于末行模式时,vi编辑器的最后一行会出现冒号“:”提示符。
切换三种模式:从命令模式输入冒号“:”可以进入末行模式,按“ESC”键则退回到命令模式。从命令模式按a、i、o键可以进入输入模式。按“ESC”键退回到命令模式。
2、命令模式中的基本操作
1)、模式切换
a 在当前光标位置之后插入内容
A 在光标所在行的末尾(行尾)插入内容
i 在当前光标位置之前插入内容
I 在光标所在行的开头(行首)插入内容
o 在光标所在行的后面插入一个新行
O 在光标所在行的前边插入一个新行
2)、移动光标
■ 光标的方向移动:直接使用键盘中的四个方向键“↑、↓、←、→”移动。
■ 翻页移动:
● 使用Page Down键或Ctrl+F组合键向下翻动一整页内容
● 使用Page Up键或Ctrl+B组合键向上翻动一整页内容
● 其中 Page Down键和Page Up键同样适用于vi的输入模式
■ 行内的快速跳转。
● 按Home键或^键、数字0键,将光标跳转到行首。
● 按End键或$键将光标跳转到行尾。
● 同样Home键和End键也适用于vi的输入模式
■ 行间的快速跳转
● 使用按键命令1G或者gg可跳转到文件的第1行
● 使用按键命令G可跳转到文件的最后一行。
● 使用按键命令#G可跳转到文件中的第#行(其中“#”号具体数字替换)
切换到末行模式并执行“:set nu”命令可以显示行号,执行“:set nonu”命令可以取消显示行号。
:set nu :set nonu
3)、复制、粘贴和删除
■ 删除操作
● 使用x键或Del键删除光标处的单个字符
● 使用按键命令dd删除当前光标所在行,使用#dd的形式删除从光标处开始的#行内容(其 中“#”号用具体数字替换)。
● 使用按键命令d^删除当前光标之前到行首的所有字符
● 使用按键命令d$删除当前光标处到行尾的所有字符
■ 复制:使用按键命令yy复制当前行整行的内容到剪贴板,使用#yy复制从光标处开始的#行内容(其 中“#”号用具体数字替换)。复制的内容需要粘贴后才能使用。
■ 粘贴:前一次被删除或复制的内容将会被保存在剪切板缓冲器中,按p键即可将缓冲区中的内容粘 贴到光标位置之后,按P键则会粘贴到光标位置之前
4)、查找文件内容
在命令模式中按/键后可以输入指定的字符串,从当前光标处开始向后进行查找(如果按?键则向前查找)。完成查找后可以按n、N键在不同的查找对象中进行选择。例如查找bin,输入“/bin”按Enter键之后将查找出文件中的“bin”字符,并提高亮度显示,按n向下查找,按N向上查找。
:/bin
5)、撤销编辑及保存退出
u键撤销一次操作,U键用于取消对当前所做的所有编辑。
在命令行模式中按ZZ可以保存退出。
3、末行模式中的基本操作
1)、保存文件及退出vi编辑器
■ 保存文件。对文件内容进行修改后并确认以后,执行“:w”命令进行保存
:w
■ 如果需要另存为的话需要制定新的文件名,必要时还可以指定文件路径。例如:
:w /root/houfile
■ 退出编辑器。可以执行“:q”命令。若文件内容已经修改却没有保存,仅用“:q”命令将无法成 功退出,这时需要使用“:q!”命令强行退出(不保存,退出)
:q!
■ 保存并退出。“:wq“或“:x”,与在命令行模式中使用ZZ命令效果一样。
:wq
2)、打开新文件或读入其他文件内容
■ 打开新文件进行编辑。执行“:e 文件名字”形式的命令即可编辑新文件。例如:
:e ~/install.log
直接打开当前用户的宿主目录中的install.log文件进行编辑。
■ 在当前文件中读入其他文件的内容。执行“:r 文件名字”形式的末行命令可以读入其他文件中 的内容,并将其复制到当前光标所在的位置。
例如:
:r /etc/passwd
把/etc/passwd 文件中的内容复制到当前文件中来。
3)、替换文件内容
末行命令格式如下:
: [替换的范围] sub/旧的内容/新的内容[/g]
sub可以简写为s。替换范围是可选部分,默认时只对当前行内容进行替换,一般可以表示为以下两种形式。
■ %:在整个文件内容中进行查找并替换。
■ n,m:在指定行数范围内的文件内容中进行查找并替换。
■ 最末尾的“/g”部分也是可选内容,表示对替换范围内每一行的所有匹配结果都进行替换,省 略“/g”时将只替换每行中的第一个匹配结果。
例如,替换5~10行中的bin替换为abc
:5,10 s/bin/abc/g
再举例替换文件中所有的a替换为b时
:% s/a/b/g