vim运维日常必备操作技巧(常用的全有)
一、说明
掌握vim的操作技巧能让运维的工作事半功倍,本文将罗列出运维日常使用到的操作技巧,不太常用的操作,本文没有收集,有高要求有兴趣的可以百度查阅vim专题
二、常用技巧
1)普通模式:移动光标的操作
指令 | 作用 |
---|---|
G或者(Shift+g) | 光标瞬移到文件的最后一行 |
gg | 光标瞬移到文件的第一行,命令等同于“1G” |
0(数字0)或者^ | 光标瞬移到当前行的行首 |
$ | 标瞬移到当前行的行尾 |
b | 光标瞬移到当前位置的单词的单词首字母处 |
e | 光标瞬移到当前位置的单词的单词尾字母处 |
w | 光标瞬移到当前位置的单词的下一个单词的单词首字母处 |
f+字母 | 光标往右瞬移到指定的“字母处”,如果指定的字母有重复,则默认跳转到从左至右的第一个 |
F+字母 | 光标往左瞬移到指定的“字母处”,如果指定的字母有重复,则默认跳转到从右至左的第一个 |
num+回车键 | 光标从当前行位置向下移动num行(num是数字) |
num+gg | 光标移动到文件的第num行,命令等同于“num+G” |
H或者(Shift+h) | 光标瞬移到当前窗口最上面的那一行 |
M或者(Shift+m) | 光标瞬移到当前窗口中间的那一行 |
L或者(Shift+l) | 光标瞬移到当前窗口最下面的那一行 |
h或者← | 光标向左移动一个字符 |
j或者↓ | 光标向下移动一个字符 |
k或者↑ | 光标向上移动一个字符 |
l或者→ | 光标向右移动一个字符 |
< | 光标所在的一整行向左缩进 |
> | 光标所在的一整行向右缩进 |
2)普通模式:搜索与替换操作
指令 | 作用 |
---|---|
:/dabiaoge | 从光标位置开始,向下搜索名为dabiaoge的字符串 |
:?dabiaoge | 从光标位置开始,向上搜索名为dabiaoge的字符串 |
r | 用光标选中字符,按下“r”,并输入替换的新内容,则可以把选中的字符修改成新内容 |
n | 从光标位置开始,向下重复前一个搜索动作 |
N | 从光标位置开始,向上重复前一个搜索动作 |
:g/A/s//B/g | 把全文符合A的内容全部替换成B,斜线都是分隔符,可用"@"和"#"代替(注意中间s后面是两个斜线) |
:%s/A/B/g | 把全文符合A的内容全部替换成B,斜线都是分隔符,可用"@"和"#"代替(这个操作和“g/A/s//B/g”一模一样的效果) |
:num1,num2s/A/B/gc | 在第num1行和第num2行之间寻找A,并且把全部的A替换成B(后面的gc的c表示再次确定,如果确认就输入y,也可以不用c,如果直接就是g,则是不用确定并且立即生效) |
3)普通模式:复制、粘贴、删除等操作
指令 | 作用 |
---|---|
yy | 复制光标当前所在的一整行 |
num+yy | 复制从光标所在行的这一行起向下的num行(光标所在的行为第一行) |
小p、大P | 小p表示将已复制的数据粘贴到光标所在行的下一行;而大P表示将已复制的数据粘贴到光标所在行的上一行 |
dd | 删除当前光标所在的一整行 |
num+dd | 删除从光标所在行开始向下的num行(光标所在的行为第一行) |
u | 撤销(回滚)前一个执行过的操作 |
. | 就一个点号,表示重复前一个执行过的操作 |
4)普通模式:日常高技巧的操作
指令 | 作用 |
---|---|
daw | 删除光标所在单词以及单词前的一个空格(d就是删除的指令,aw就是光标所在单词加上前一个空格) |
gUgU | 把光标所在行的一整行的小写字母全部转成大写字母(原本就有的大写字母则是忽略) |
gugu | 把光标所在行的一整行的大写字母全部转成小写字母(原本就有的小写字母则是忽略) |
g~g~ | 把光标所在行的一整行的字母大小写互相调换,大写变小写,小写变大写 |
gU+t+字母 | gU就是转为大写的操作指令,“t+字母”就是是表示重新定义光标在这一行的位置,而这个字母就是新的光标位置,如果同一行内有多个相同字母,则默认是第一个,表示从光标现在位置开始到“指定字母”这个位置止,之间的凡是小写的字母全部转成大写字母 |
gu+t+字母 | gu就是转为小写的操作指令,“t+字母”就是是表示重新定义光标在这一行的位置,而这个字母就是新的光标位置,如果同一行内有多个相同字母,则默认是第一个,表示从光标现在位置开始到“指定字母”这个位置止,之间的凡是大写的字母全部转成小写字母 |
g~+t+字母 | g~就是转为大小写互掉的操作指令,“t+字母”就是是表示重新定义光标在这一行的位置,而这个字母就是新的光标位置,如果同一行内有多个相同字母,则默认是第一个,表示从光标现在位置开始到“指定字母”这个位置止,之间的所有字母大小写互掉 |
Ctrl+a(快捷键) | 把光标所在的数字加1 |
num+Ctrl+a | 把光标所在的数字加num(num是数字,不能是负数、0还有小数,必须是正整数) |
5)进入编辑模式的命令(一共就六种进入编辑模式的命令键)
指令 | 作用 |
---|---|
i | 在当前光标所在处开始进入编辑模式 |
a | 在当前光标所在处的下一个字符处开始进入编辑模式 |
I | 在当前光标所在行的行首的第一个非空格符处开始进入编辑模式(与A正好相反) |
A | 在当前光标所在行的行尾最后一个字符处开始进入编辑模式(与I正好相反) |
O | 在当前光标所在行的上一行插入新的一行(也就是把当前光标所在的行下移一行,但是光标还在这一行,并且光标移动到行首) |
o | 不是数字0,是字母o,表示在当前光标所在行的下一行插入新的一行(与O正好相反) |
Esc | 退出编辑模式,切回到命令模式 |
6)命令行模式的命令
指令 | 作用 |
---|---|
:wq或者x | 退出并保存 |
:wq!或者x! | 退出并强制保存,“!”为强制的意思 |
:q! | 强制退出,但不保存 |
:num1,num2 w filename | 将第num1行到第num2行的内容保存到filename这个文件(filename文件无须提前创建) |
:num1,num2 co num3 | 将第num1行到第num2行的内容复制到第num3行的下面 |
:num1,num2 m num3 | 将第num1行到第num2行的内容移动(剪切)到第num3行的下面 |
:!任意命令 | 表示暂时离开vim页面,转到执行的那个命令的页面,例如:!ls /root |
:set nu | 所有行都显示行号 |
:set nonu | 取消行号(与“set nu”相反) |
:vs filename | 以垂直分屏的方式显示,会左右显示当前文件和filename文件的内容 |
:sp filename | 以水平分屏的方式显示,会上下显示当前文件和filename文件的内容 |
:,$d | 注意最前面有个逗号,表示删除当前光标所在行以及后面的所有行(光标所在的那一行也删除) |
:num,.d | 注意num和d之间有个逗号和点,表示删除第num行到光标所在行的内容(光标所在的那一行也删除) |
7)可视化模式
.......... | .......... |
---|---|
可视化模式类型分为三种字符 | 可视化、行可视化、块可视化 |
在普通模式下: | 按v(小写),进入字符可视化 |
按V(大写,也可以Shift+v),进入行可视化 | |
按“Ctrl+v”,进入块可视化 | |
什么是可视化? | 就是一种控制选择粒度的方案。 |
字符可视化 | 选择粒度是一个字符,就是以字符为单位,一次选择一个字符 |
行可视化 | 选择粒度是一整行,就是为行为单位,一次选择一行 |
块可视化 | 最强大的选择粒度,没有选择单位,可自由选择,选择完的区域形成一个块,所以叫块可视化 |
下面罗列工作中用到可视化最常用的操作:
把连续的几行代码在行首部注释掉:
步骤 | 指令 | 作用 |
---|---|---|
① | num1+gg | 把光标定位到需要注释掉的几行代码的首行的行首 |
② | Ctrl+v | 进入块可视化 |
③ | num2+gg | 把光标定位到需要注释掉的几行代码的末行的行首(如果行数不多,就连续按↓或者j,直到末行为止即可) |
④ | Shift+i”或者I | 在第一个非空格符处开始进入编辑模式 |
⑤ | 输入“#” | 一般的注释符是“#”号,这里也可以输入其他的注释符 |
⑥ | 按Esc退出 | 如果行数比较多,按下Esc不能立即给所选的所有行加上#号,需要等待1~2秒即可 |
既然有一次性注释的方法,那么也就有一次性取消注释的方法:
步骤 | 指令 | 作用 |
---|---|---|
① | num1+gg | 把光标定位到需要取消注释掉的几行代码的首行的行首 |
② | Ctrl+v | 进入块可视化 |
③ | num2+gg | 把光标定位到需要取消注释掉的几行代码的末行的行首 //如果行数不多,就连续按↓或者j,直到末行为止即可 |
④ | 执行d删除 | 即可删除所有的“#” |
把连续的几行代码在行尾部加上相同字符(比如C++代码是在行尾部加“;”才能生效):
步骤 | 指令 | 作用 |
---|---|---|
① | num1+gg | 把光标定位到需要加“;”的几行代码的首行的行首 |
② | Ctrl+v | 进入块可视化 |
③ | num2+gg | 把光标定位到需要注释掉的几行代码的末行的行首 //如果行数不多,就连续按↓或者j,直到末行为止即可 |
④ | $ | 光标瞬移到当前行的行尾 |
⑤ | “Shift+a”或者A | 在最后一个非空格符处开始进入编辑模式 |
⑥ | 输入“;” | 添加“;” |
⑦ | 按Esc退出 | 如果行数比较多,按下Esc不能立即给所选的所有行加上;号,需要等待1~2秒即可 |
一次性删除N行代码(我知道可用Ndd完成,这里用行可视化完成)
步骤 | 指令 | 作用 |
---|---|---|
① | num1+gg | 把光标定位到需要删除的几行代码的首行的行首 |
② | “Shift+v”或者V | 进入行可视化 |
③ | num2+gg | 把光标定位到需要删除掉的几行代码的末行的行首 //如果行数不多,就连续按↓或者j,直到末行为止即可 |
④ | 执行d删除 | 可删除所有的被选中行 |
一次性删除所选内容(这个用Ndd可完成不了,这里用块可视化完成)
步骤 | 指令 | 作用 |
---|---|---|
① | num1+gg | 把光标定位到需要删除内容的起始行的行首 |
② | f+字母/数字 | 跳转到需要删除部分的起始位置 |
③ | Ctrl+v | 进入块可视化 |
④ | num2+gg | 把光标定位到需要删除部分的末尾部分所在行的行首 //如果行数不多,就连续按↓或者j,直到末行为止即可 |
⑤ | 再次执行“f+字母/数字” | 跳转到需要删除部分的结尾位置 |
说明 | 如果行数不是太多,需要删除的部分全部在一个窗口内,则不用④和⑤那么麻烦,直接使用“← ↓ ↑→”方向键来选定需要删除的区域即可 | |
⑥ | 执行“d”删除 | 可删除所有的被选中部分 |
既然有添加和删除,那么一定也有替换:
步骤 | 指令 | 作用 |
---|---|---|
① | num1+gg | 把光标定位到需要替换内容的起始行的行首 |
② | f+字母/数字 | 跳转到需要替换部分的起始位置 |
③ | Ctrl+v | 进入块可视化 |
④ | num2+gg | 把光标定位到需要替换部分的末尾部分所在行的行首 //如果行数不多,就连续按↓或者j,直到末行为止即可 |
⑤ | 再次执行“f+字母/数字” | 跳转到需要替换部分的结尾位置 |
说明 | 如果行数不是太多,需要替换的部分全部在一个窗口内,则不用④和⑤那么麻烦,直接使用“← ↓ ↑→”方向键来选定需要替换的区域即可 | |
⑥ | 执行“r” | 替换命令 |
⑦ | 输入新的字符 | 输入完即可 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix