青蛙学Linux—文本编辑器Vi/Vim
1、Vi和Vim
1.1、简介
Vi是Linux和Unix下最基本的文本编辑器,工作在字符模式下,没有图形界面,使用众多的命令和按键来进行操作。所有的Linux和Unix都会默认安装Vi,而且任何版本的Linux和Unix的Vi编辑器都是完全相同的。
Vim是一个在Vi基础上改进的文本编辑器。在Vi强大的功能上增加了新的功能,如代码补全、代码高亮等。
1.2、三种模式
vi/vim可分为三种模式,分别为命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。
2、使用Vi/Vim
2.1、命令模式
当Vi/Vim启动时,便进入命令模式。此时在键盘的输入将会被vi/vim识别为命令,而非向文件中输入字符。在该模式下通过不同的按键或按键组合可以实现各种功能,下面按照功能的类型来介绍这些按键:
2.1.1、光标的移动
h 或 左箭头:光标向左移动一个字符
j 或 下箭头:光标向下移动一个字符
k 或上箭头:光标向上移动一个字符
l 或 右箭头:光标向右移动一个字符
如果想要进行多次移动,可以加上移动的次数(输入数字)后再按动作键。如需要向下移动20行,可以使用“20j”
Ctrl+f:向下移动一页,相当于Page Down
Ctrl+b:向上移动一页,相当于Page Up
Ctrl+d:向下移动半页
Ctrl+u:向上移动半页
+:光标移动到非空格符的下一行
-:光标移动到非空格符的上一行
n<space>:按下数字后再按空格键,光标会向右移动n个字符
0 或 Home键:光标移动到这一行的最前面字符处
$ 或 End键:光标移动到这一行的最后面字符处
H:光标移动到屏幕的最上方那一行的第一个字符
M:光标移动到屏幕的中央那一行的第一个字符
L:光标移动到屏幕的最下方那一行的第一个字符
G:光标移动到文档的最后一行
nG:光标移动到文档的第n行
gg:移动到文档的第一行
n<Enter>:光标向下移动n行
2.1.2、删除、复制粘贴、复原重做
x X:x向后删除一个字符(相当于del),X向前删除一个字符(相当于backspace)
nx:连续向后删除n个字符
dd:删除光标所在的那一行
ndd:删除从光标所在行开始的向下的n行
d1G:删除光标所在行到第一行的所有数据
dG:删除光标所在行到最后一行的所有数据
d$:删除光标所在处到该行的最后一个字符
d0:删除光标所在处到该行的第一个字符
yy:复制光标所在的那一行
nyy:复制从光标所在行开始的向下的n行
y1G:复制光标所在行到第一行的所有数据
yG:复制光标所在行到最后一行的所有数据
y$:复制光标所在处到该行的最后一个字符
y0:复制光标所在处到该行的第一个字符
p P:p将复制的数据在光标的下一行粘贴,P将复制的数据在光标的上一行粘贴
J:将光标所在行与下一行组合成一行
u:复原前一个动作
Ctrl+r:重做上一个动作
.:重复前一个动作
2.2、输入模式
在命令模式下按下i,即可进入输入模式,在输入模式中就可以向文档中输入内容。使用以下按键可以从命令模式进入输入模式:
i I:i在光标前输入,I在光标所在行的第一个非空格符处开始输入
a A:a在光标后输入,A在光标所在行的最后一个字符处开始输入
o O:o在光标所在行的下一行开始输入,O在光标所在行的上一行开始输入
r R:r只会取代光标所在字符一次,R会一直取代光标所在字符,直到按下Esc
当按下以上的按键,在Vi/Vim的左下角会出现“--INSERT--”或者”--REPLACE--“字样,此时才可以进行输入
Esc:退出输入模式,回到命令模式
2.3、底线命令模式
在命令模式下按下 :,即可进入底线命令模式。在该模式下可以通过输入命令来实现功能,比如保存文档和退出Vi/Vim等。在底线命令模式下有以下常用命令(省略:):
w:保存不退出
q:不保存退出
wq:保存并退出
x!:保存并退出,同wq
注意:以上命令均可在末尾加上!表示强制执行。
ZZ:文档改动则保存退出,无改动则退出
w filename:文件另存为
r filename:将另一个文档的内容加入到光标所在行的后面
n1,n2 w filename:将n1到n2的内容保存到新的文档中
! command:暂时离开Vi/Vim并执行command
set nu:显示行号
set nonu:取消行号的显示
2.4、搜索替换
在Vi/Vim下执行搜索时,也相当于底线命令模式,但是此时不使用:来转到底线命令模式。输入以下命令进行搜索:
/string:从光标处向下查找指定字符串
?string:从光标处向上查找指定字符串
n:按键n,重复上一个查找动作
N:大写按键N,以相反的方向重复上一个查找动作
当Vi/Vim搜索到内容之后会使用高亮进行显示,如果不取消高亮的话,就算退出文档后再次打开时还会有高亮显示,所以可以使用以下命令取消高亮
:noh
Vi/Vim下的替换就是在底线命令模式下进行的,使用:来转换。使用以下几种方法进行内容替换:
s/string1/string2/g:将当前光标所在行中的所有string1替换成string2
n1,n2s/string1/string2/g:将n1到n2行中的所以string1替换成string2
1,$s/string1/string2/g:将整个文档中的string1替换成string2
1,$s/string1/string2/gc:将整个文档中的string1替换成string2,并在替换之前提示用户是否替换