什么是vim
在Linux环境下,编辑文件一般都会用到vim命令,可以当做vi命令的高级版本。
可以说,掌握Linux的常用命令是程序员的基本要求,而vim命令的熟练操作就是重中之重。
按照鸟哥的说法:
- 所有的UNIX Like系统都会内置vi文本编辑器,其它的文本编辑器则不一定会存在
- 很多软件的编辑接口都会主动调用vi
- vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计
- 程序简单,编辑速度相当快
vi的模式
vi分为3种模式
一般模式
这也是默认的模式,用vim打开一个文件就直接进入了这个模式。在这个模式下,可以使用上下左右键来移动光标,可以删除字符或删除整行,也可以复制、粘贴文件数据
比如,编辑spark-env.sh.test这个文件
vim spark-env.sh.test
会以字体颜色辨别
编辑模式
在一般模式下可以进行删除、复制、粘贴等操作,但是却无法编辑文件内容的。
按下"i,I,o,O,a,A,r,R"等任何一个字母之后才会进入编辑模式。通常在Linux中,按下这些按键之后,界面会出现INSERT或REPLACE的字样,就可以进行编辑了。如果要回到一般模式,就按下【ESC】这个按键即可退出编辑模式
命令模式
在一般模式中,按下":、?、/"这3个中的任何一个按钮,就可以将光标移到到最下面的那一行。
在这个模式下,可以进行字符的查找,比如查找HADOOP这个单词,按下"/",然后输入HADOOP,找到第一字符出现的那行,然后按"n"继续向下搜下下一个
读取、保存、大量替换字符、离开vi、显示行号等的操作都是在这个模式下完成的
3个模式的转换关系可以用下图表示
常用命令
一般模式
删除、复制与粘贴
命令 | 说明 |
x,X | 在一行字当中,x为向后删除一个字符(相当于[Del]),X为向前删除一个字符(相当于[Backspace]) |
nx | n为数字,连续向后删除n个字符。比如连续向后删除10个字符,"10x" |
dd | 删除光标所在的那一整行 |
ndd | n为数字,删除光标所在的向下n行,例如20dd则是删除20行 |
yy | 复制光标所在的那一行 |
nyy | n为数字。复制光标所在的向下n行,例如20yy则是复制20行 |
p,P | p为将已复制的数据在光标下一行粘贴,P则为粘贴在光标的上一行。 |
移动光标的常用方法
命令 | 说明 |
[Ctrl]+[f] | 屏幕向下移动一页,相当于[Page Down] |
[Ctrl]+[b] | 屏幕向上移动一页,相当于[Page Up] |
G | 移动到这个文件的最后一行 |
gg | 移动到这个文件的第一行,相当于1G |
N[Enter] | n为数字,光标向下移动n行 |
u | 复原前一个操作 |
[Ctrl]+r | 重做上一个操作 |
. | 小数点,重复前一个操作。比如重复删除、重复粘贴等操作 |
查找与替换
命令 | 说明 |
/word | 向下寻找一个名词为word的字符串,例如要在文件寻找HADOOP,输入/HADOOP就行 |
?word | 向上寻找一个名词为word的字符串 |
n | 代表重复前一个查找操作,例如要在文件寻找HADOOP,输入/HADOOP就行,然后继续按n会寻找下一个 |
0或功能键[Home] | 这是数字"0":移动到这一行的最前面的字符串处 |
$或功能键[End] | 移动到这一行的最后面字符串处 |
:n1,n2s/word1/word2/g | n1与n2为数字。在第n1到n2行之间寻找字符串word1,并替换为字符串word2。比如,在1到10行直接,寻找SPARK替换spark:":1,10s/SPARK/spark/g" |
:1,$s/word1/word2/g | 从第1到最后一行之间寻找字符串word1,并替换为字符串word2。 |
:1,$s/word1/word2/gc | 从第1到最后一行之间寻找字符串word1,并替换为字符串word2。并让用户确认 |
编辑模式
命令 | 说明 |
i,I | 进入插入模式: i为从目前光标所在处插入,I为目前所在行第一个非空格字符处开始插入 |
o,O | 进入插入模式: o为目前光标所在行的下一行处插入新的一行,O为o为目前光标所在行的上一行处插入新的一行 |
a,A | 进入插入模式: a为从目前光标所在的下一个字符处插入,A为目前所在行最后一个字符处开始插 |
r,R | 进入替换模式: r只会替换光标所在的那一个字符一次;R会一直替换光标所在的文字,直到按下ESC为止 |
命令模式
命令 | 说明 |
:w | 将编辑的数据写入硬盘文件中 |
:w! | 强制写入文件。不过必须是有该文件的写权限 |
:q | 离开 |
:q! | 若曾修改过文件,又不想保存,使用"!"强制离开保存文件 |
:wq | 保存后离开 |
:wq! | 强制保存后离开 |