引言
一开始学习接触时候不重视,觉得只要会打开关闭就行,要写代码直接在vscode等常用顺手的软件上面用也ok。直到接触代码量足够大的时候,直到发现很多文件都是在虚拟机里面然后进行修改的时候,才发现那种无力感,才意识到这些命令的妙处。
话不多说,先举个例子:
开发过程中做移植要对相应文件裁剪修改
现在我要进行网卡移植,需要配置设备树描述网卡和CPU的链接情况 ,所以要在 $ vim arch/arm/boot/dts/exynos4412-fs4412.dts的regulators 前添加一段代码。
在一个589行代码里靠滑鼠标找regulators,刺激吧。
但其实呢,只需要敲 /regulators 找到对应字符,然后按 n 或者 Shift+n(即N) 查找同名的上一个和下一个从而可以快速找到相应位置
命令介绍
dd
剪切光标所在行,前面可以加系数表示要剪切几行。
比如:
4dd 指剪切光标所在行数起往下4行进行剪切
d
对块部分进行剪切。
比如:
d0 表示剪切光标位置到该行行首的内容
d$ 表示剪切光标位置到该行行尾的内容
:2,$d 表示剪切第二行到末行之间的内容
yy
复制光标所在行,前面可以加系数表示要复制几行。
比如:
4yy 指复制光标所在行数起往下4行进行复制
y
对块部分进行复制。
比如:
y0 表示复制光标位置到该行行首的内容
y$ 表示复制光标位置到该行行尾的内容
:2,$y 表示复制第二行到末行之间的内容
p和P
都是粘贴的意思,p指粘贴在光标所在行上面一行,P指粘贴在光标所在行下面一行
x
删除光标位置的一个字符,前面加系数可以表示删包括光标所指的字符开始往后几个。
比如:
3x 表示删光标在内往后3个字符
u
撤销
1G
光标移到首行
G
光标移到末行
:行号
表示让光标移到第几行。
比如:
:36 表示光标移到第36行代码的地方
/
查找内容,前面一开始举例用的命令,然后n是下一个同名内容,N是上一个同名内容
: s
替换的意思
比如:
: s/str1/str2 表示在光标所在行里,用str1替换掉str2
(先说明一下,冒号和s之间没空格,我空格隔开主要是因为csdn编译器会把冒号+s识别成了这个表情包 😒)
: ,$s/str1/str2/g 表示从当前行到末行的str2都用str1换掉
(这里加上g表示所有同名内容都替换,没加的话只会替换第一个)
: %s/str1/str2/g 表示全文件的str2都用str1换掉
: 1,$s/str1/str2/g 表示全文件的str2都用str1换掉
(第一行到末行)
: 36,64s/str1/str2/g 表示第36行到64行的str2都用str1换掉