vim编辑器从零到精通,运维必学的核心技能
点击蓝字
关注我们
真实案例
周一早上,新来的小李接到紧急任务——修改生产服务器的 nginx 配置。他自信满满地 SSH 登录,输入 vi nginx.conf,结果… 敲 i 没反应,按方向键屏幕出现一堆 A B C D,一急之下乱按,把配置改得面目全非。最后只能灰溜溜地找主管重启服务器恢复配置。主管问:”你会用 vim 吗?”小李红着脸说:”我只用过记事本…” 这不是笑话,是无数新手的真实写照。vim 是 Linux 服务器的标配编辑器,不会用它,你连配置文件都改不明白。今天这篇文章,帮你从零搞定 vim,下次上服务器不再手抖。
先说结论(记住这句话): 🎯 vim 的核心是模式:不同模式下,同一个按键有不同含义 ⌨️ 普通模式移动光标,插入模式输入文字,命令模式执行操作 🔄 搞懂模式切换,vim 就入门了 80%
目 录
Part 1 先搞懂:vim 的四种模式
Part 2 必学命令:光标移动与跳转
Part 3 编辑操作:增删改查
Part 4 搜索与替换:文本处理神器
Part 5 多文件与分屏:高效编辑
Part 6 高级技巧:寄存器、宏、配置
Part 7 10个生产级实战场景
Part 8 避坑指南
一、先搞懂:vim 的四种模式

01
为什么 vim 这么难学?
很多人第一次用 vim 会崩溃:打开文件后敲键盘,屏幕上出现奇怪字符,按退格键不删除,按方向键光标乱跳——因为你不知道 vim 是有模式的。
普通编辑器(记事本、VS Code)只有一种模式:你按键就是输入文字。但 vim 不同,它有四种模式,每种模式下按键的含义完全不同:
普通模式
默认模式移动光标、复制粘贴按 ESC 进入
插入模式
输入文字像普通编辑器一样按 i/a/o 进入
可视模式
选中文本批量操作按 v/V/Ctrl+v 进入
命令模式
执行命令保存、退出、替换按 : 进入
02
模式切换速查
刚打开 vim 时,你处于普通模式。这是最重要的模式,也是新手最容易忽略的。
|
当前模式 |
目标模式 |
按键 |
说明 |
|
普通模式 |
插入模式 |
i / a / o |
i=光标前,a=光标后,o=新行 |
|
普通模式 |
可视模式 |
v / V / Ctrl+v |
v=字符,V=行,Ctrl+v=块 |
|
普通模式 |
命令模式 |
i / a / o |
: = 底行命令,/ = 向下搜索 |
|
插入模式 |
普通模式 |
Esc |
退出插入,回到普通模式 |
|
可视模式 |
普通模式 |
Esc |
取消选择,回到普通模式 |
|
命令模式 |
普通模式 |
Esc / Enter |
执行命令后自动返回 |
打开 vim → 普通模式(默认)
↓ 按 i/a/o
插入模式(输入文字) ──按 ESC──→ 普通模式
↑ 按 ESC ↓ 按 :
命令模式(:w 保存 :q 退出)
💡 记住一个原则:不知道自己在哪个模式时,狂按 ESC 回到普通模式。普通模式是 vim 的”安全区”。
03
退出 vim 的正确姿势
vim最头疼的问题:怎么退出 vim?记住这几条命令:
#在普通模式下,按 : 进入命令模式,然后输入:
:w # 保存(write)
:q # 退出(quit,文件未修改时)
:wq # 保存并退出
:q! # 强制退出,不保存修改
😡 # 等同于 :wq(仅当文件有修改时才保存)
# 快捷键方式(普通模式下按两次)
ZZ # 保存并退出(等同于 :wq)
ZQ # 强制退出不保存(等同于 :q!)
💡 如果你改乱了配置文件想放弃修改,一定要用 :q! 或 ZQ 强制退出,别用 :wq 把错误配置保存了。
二、必学命令:光标移动与跳转

01
基础移动(普通模式下)
vim 最强大的地方在于不用鼠标就能快速移动光标。熟练后,你的手不需要离开键盘主区。
|
按键 |
作用 |
记忆技巧 |
|
h |
左移一个字符 |
← 键在左边,h 在左边 |
|
j |
下移一行 |
j 像个向下的钩子 |
|
k |
上移一行 |
k 像个向上的箭头 |
|
l |
右移一个字符 |
l 在右边,→ 键在右边 |
|
w |
跳到下一个单词开头 |
word |
|
b |
跳到上一个单词开头 |
back |
|
e |
跳到当前/下一个单词结尾 |
end |
|
0 |
跳到行首 |
数字 0,行首 |
|
^ |
跳到行首第一个非空字符 |
正则里 ^ 也表示行首 |
|
$ |
跳到行尾 |
正则里 $ 也表示行尾 |
|
gg |
跳到文件第一行 |
go to beginning |
|
G |
跳到文件最后一行 |
大 G,跳到末尾 |
|
:N |
跳到第 N 行(如 :10 跳到第10行) |
行号定位 |
|
Ngg / NG |
跳到第 N 行(如 10gg 或 10G) |
快捷跳转 |
#示例:在普通模式下
h j k l # 基本移动(习惯后比方向键快 10 倍)
5j # 向下移动 5 行
10G # 跳转到第 10 行
gg # 跳到文件开头
G # 跳到文件末尾
$ # 跳到行尾
0 # 跳到行首
w # 下一个单词
3w # 向后跳 3 个单词
💡 不用刻意背,用多了自然就记住了。初期可以用方向键过渡,但建议尽快改用 h/j/k/l。
02
屏幕内快速跳转
|
按键 |
作用 |
|
H |
跳到屏幕顶部(High) |
|
M |
跳到屏幕中间(Middle) |
|
L |
跳到屏幕底部(Low) |
|
Ctrl+f |
向下翻一页(forward) |
|
Ctrl+b |
向上翻一页(backward) |
|
Ctrl+d |
向下翻半页(down) |
|
Ctrl+u |
向上翻半页(up) |
|
zz |
当前行居中显示 |
|
zt |
当前行置顶显示 |
|
zb |
当前行置底显示 |
03
行内精准跳转
#跳转到指定字符
f + 字符 # 向后跳到该字符(光标落在字符上)
F + 字符 # 向前跳到该字符
t + 字符 # 向后跳到该字符前一个位置(till)
T + 字符 # 向前跳到该字符后一个位置
# 示例
fh # 跳到当前行下一个 ‘h’ 字符
t, # 跳到下一个逗号前
; # 重复上次 f/F/t/T 命令
, # 反向重复上次 f/F/t/T 命令
三、编辑操作:增删改查

01
进入插入模式的多种方式
进入插入模式不只是按 i,vim 提供了多种方式适应不同场景:
|
按键 |
作用 |
场景 |
|
i |
在光标前插入 |
最常用,光标位置插入 |
|
a |
在光标后插入 |
追加内容时用 |
|
I |
在行首插入 |
快速在行首添加内容 |
|
A |
在行尾插入 |
快速在行尾追加 |
|
o |
在下方新建一行插入 |
另起一行写代码 |
|
O |
在上方新建一行插入 |
在当前行前插入新行 |
|
s |
删除当前字符并插入 |
修改当前字符 |
|
S |
删除当前行并插入 |
重写当前行 |
|
c + motion |
删除指定范围并插入 |
cw 删一个词并插入 |
|
C |
删除到行尾并插入 |
修改行尾内容 |
#示例
i # 光标前插入
A # 跳到行尾并插入(非常常用)
o # 下方新建一行并插入
cw # 删除当前单词并进入插入模式
c$ # 删除到行尾并进入插入模式
💡 A 和 o 是最高频的两个插入命令,记住它们能覆盖 80% 的插入场景。
02
删除操作
|
按键 |
硬链接(无参数) |
|
x |
删除光标所在字符 |
|
X |
删除光标前一个字符 |
|
dd |
删除整行(并存入剪贴板) |
|
D |
删除到行尾(等同于 d$) |
|
dw |
删除一个单词 |
|
d$ |
删除到行尾 |
|
d0 |
删除到行首 |
|
dG |
删除到文件末尾 |
|
dgg |
删除到文件开头 |
|
Ndd |
删除 N 行(如 5dd 删除 5 行) |
|
d + motion |
删除指定范围 |
#示例
x # 删除当前字符
dd # 删除当前行
5dd # 删除 5 行
dw # 删除一个单词
d$ # 删除到行尾
dG # 删除到文件末尾
d1G # 删除到文件开头
03
复制、粘贴与撤销
|
按键 |
作用 |
|
yy |
复制当前行 |
|
Nyy |
复制 N 行(如 3yy 复制 3 行) |
|
yw |
复制一个单词 |
|
y$ |
复制到行尾 |
|
p |
粘贴到光标后 |
|
P |
粘贴到光标前 |
|
u |
撤销上一步操作 |
|
Ctrl+r |
重做(撤销的撤销) |
|
. |
重复上一次操作 |
#示例:复制粘贴
yy # 复制当前行
p # 粘贴到下一行
P # 粘贴到上一行
# 示例:撤销重做
u # 撤销
Ctrl+r # 重做
# 示例:重复操作
dd # 删除一行
. # 再删除一行(重复上次操作)
5. # 再删除 5 行
💡 .(点号)是 vim 的神级命令,可以重复上一次操作。比如你用 dw 删了一个单词,按 . 就能继续删下一个单词。
04
修改操作
|
按键 |
作用 |
|
r |
替换单个字符 |
|
R |
进入替换模式(连续替换) |
|
~ |
切换大小写 |
|
J |
合并当前行与下一行 |
|
>> |
增加缩进 |
|
<< |
减少缩进 |
|
== |
自动缩进当前行 |
|
gg=G |
自动缩进整个文件 |
#示例
r + 字符 # 替换当前字符(如 ra 把当前字符改成 a)
R # 进入替换模式,按 ESC 退出
~ # 切换当前字符大小写
3~ # 切换 3 个字符的大小写
J # 合并当前行和下一行
>> # 当前行增加缩进
<< # 当前行减少缩进
四、搜索与替换:文本处理神器

01
搜索
#在普通模式下
/ + 关键词 # 向下搜索
? + 关键词 # 向上搜索
n # 跳到下一个匹配
N # 跳到上一个匹配
* # 搜索光标下的单词(向下)
# # 搜索光标下的单词(向上)
# 示例
/error # 向下搜索 “error”
n # 下一个匹配
N # 上一个匹配
* # 搜索光标所在的单词
02
替换
替换是 vim 的强项,可以在命令模式下用 :s(substitute)命令实现强大的文本替换:
#基本格式
:s/旧内容/新内容/选项
# 常用替换命令
:s/old/new/ # 替换当前行第一个 old
:s/old/new/g # 替换当前行所有 old
:%s/old/new/g # 替换整个文件所有 old
:%s/old/new/gc # 替换整个文件,每次确认(c=confirm)
:5,10s/old/new/g # 替换第 5-10 行的所有 old
:.,$s/old/new/g # 从当前行到文件末尾替换
:1,.s/old/new/g # 从文件开头到当前行替换
# 使用正则表达式
:%s/^#//g # 删除所有行首的 #
:%s/\s\+$//g # 删除所有行尾空格
:%s/\r\n/\r/g # 统一换行符为 Unix 格式(Windows 转 Unix)
:%s/[0-9]\+/NUM/g # 把所有数字替换成 NUM
|
选项 |
作用 |
|
g |
全局替换(一行多个匹配都替换) |
|
c |
每次替换前确认 |
|
i |
忽略大小写 |
|
I |
区分大小写 |
|
n |
只显示匹配数量,不实际替换 |
💡 替换命令是运维处理配置文件的利器,比如批量修改路径、IP 地址、端口号等。:%s/old/new/g 是最常用的万能模板。
03
高亮搜索与取消
#搜索后关键词会高亮显示
:set hlsearch # 开启搜索高亮
:set nohlsearch # 关闭搜索高亮
:noh # 临时取消高亮(下次搜索会重新高亮)
五、多文件与分屏:高效编辑

01
多文件编辑
#打开多个文件
vim file1.txt file2.txt file3.txt
# 在 vim 内打开新文件
:e file2.txt # 打开 file2.txt
:e! file2.txt # 放弃当前修改,打开 file2.txt
# 文件间切换
:bn # 下一个文件(buffer next)
:bp # 上一个文件(buffer previous)
:ls # 列出所有打开的文件
:b2 # 切换到第 2 个文件
:bd # 关闭当前文件(buffer delete)
02
分屏操作
#分屏打开
:sp file.txt # 水平分屏打开文件
:vsp file.txt # 垂直分屏打开文件
# 在分屏间切换
Ctrl+w h # 切换到左边窗口
Ctrl+w l # 切换到右边窗口
Ctrl+w j # 切换到下边窗口
Ctrl+w k # 切换到上边窗口
Ctrl+w w # 循环切换窗口
# 调整窗口大小
Ctrl+w + # 增大窗口高度
Ctrl+w – # 减小窗口高度
Ctrl+w > # 增大窗口宽度
Ctrl+w < # 减小窗口宽度
Ctrl+w = # 所有窗口等大
# 关闭分屏
Ctrl+w c # 关闭当前窗口
Ctrl+w o # 只保留当前窗口
#命令行直接分屏打开
vim -o file1 file2 # 水平分屏打开两个文件
vim -O file1 file2 # 垂直分屏打开两个文件
六、高级技巧:寄存器、宏、配置

01
寄存器:vim 的剪贴板系统
vim 有多个寄存器,可以存储多组内容。默认使用的是无名寄存器(用 yy 和 p 操作的)。
#查看所有寄存器内容
:registers
:reg
# 使用指定寄存器
“ayy # 复制当前行到寄存器 a
“ap # 粘贴寄存器 a 的内容
“add # 删除当前行到寄存器 a
# 系统剪贴板
“+yy # 复制到系统剪贴板
“+p # 从系统剪贴板粘贴
💡 如果你想在 vim 和系统其他程序之间复制粘贴,用 “+y 和 “+p(需要 vim 支持剪贴板功能)。
02
宏:录制重复操作
宏可以把一系列操作录制下来,然后重复执行,非常适合批量处理格式化文本。
#录制宏
q + 寄存器名 # 开始录制(如 qa 录制到寄存器 a)
… 操作 …
q # 结束录制
# 执行宏
@ + 寄存器名 # 执行一次(如 @a)
@@ # 执行上次宏
N@ + 寄存器名 # 执行 N 次(如 10@a)
# 示例:给每行开头加 #
qa # 开始录制到寄存器 a
I# [ESC] # 行首插入 # 并回到普通模式
j # 移动到下一行
q # 结束录制
10@a # 执行 10 次
03
配置文件 .vimrc
vim 的配置文件是 ~/.vimrc,可以在里面设置各种选项和快捷键:
#常用配置(写入 ~/.vimrc)
set number ” 显示行号
set relativenumber ” 相对行号
set tabstop=4 ” Tab 宽度 4 空格
set shiftwidth=4 ” 缩进宽度 4 空格
set expandtab ” Tab 转空格
set autoindent ” 自动缩进
set cursorline ” 高亮当前行
set hlsearch ” 搜索高亮
set incsearch ” 增量搜索
set ignorecase ” 搜索忽略大小写
set smartcase ” 智能大小写
set wrap ” 自动换行
syntax on ” 语法高亮
# 快捷键映射
map:w ” Ctrl+s 保存
imap:wa ” 插入模式 Ctrl+s 保存
04
实用配置一键生成
#快速创建基础配置
cat > ~/.vimrc << ‘EOF’
set nocompatible
set backspace=indent,eol,start
set number
set tabstop=4
set shiftwidth=4
set expandtab
set autoindent
set hlsearch
set incsearch
syntax on
EOF
七、10个生产级实战场景

场景1:修改服务器配置文件
#SSH 登录服务器后编辑 nginx 配置
vim /etc/nginx/nginx.conf
# 快速定位
/nginx # 搜索 “nginx”
n # 下一个匹配
# 修改配置
i # 进入插入模式
修改内容…
ESC # 回到普通模式
# 保存退出
:wq # 保存并退出
场景2:批量注释多行
#方法1:可视模式
Ctrl+v # 进入块可视模式
j 或 k # 选择多行
Shift+i # 在选中行首插入
# # 输入注释符号
ESC # 应用于所有选中行
# 方法2:替换命令
:5,10s/^/#/ # 第 5-10 行行首加 #
:5,10s/^#// # 第 5-10 行取消注释
场景3:删除文件中所有空行
#删除所有空行
:g/^$/d # 删除所有空行
:g/^\s*$/d # 删除所有空行(包括只有空白字符的行)
场景4:批量替换 IP 地址
#把所有 192.168.1.100 替换成 192.168.2.100
:%s/192\.168\.1\.100/192.168.2.100/g
# 注意:点号需要转义(\.),否则会匹配任意字符
场景5:在行尾统一添加内容
#所有行尾加分号
:%s/$/;/g
# 所有行尾加 “,new”(如 CSV 追加列)
:%s/$/,new/g
场景6:复制第 10-20 行到文件末尾
:10,20t$ # 复制第 10-20 行到末尾(t = copy):10,20m$ # 移动第 10-20 行到末尾(m = move)
场景7:对比两个文件差异
#垂直分屏对比
vimdiff file1.conf file2.conf
# 或在 vim 内
:diffsplit file2.conf
# 跳转差异
]c # 下一个差异
[c # 上一个差异
:diffupdate # 刷新差异
场景8:格式化代码
#格式化当前行
==
# 格式化整个文件
gg=G
# 格式化指定范围
:5,20s/\s\+$// # 删除第 5-20 行行尾空格
场景9:查看大文件定位问题
#打开大日志文件
vim /var/log/app.log
# 跳到文件末尾
G
# 搜索错误
/ERROR
n # 下一个 ERROR
# 或者打开时直接跳到末尾
vim + /var/log/app.log # + 号表示打开后跳到末尾
场景10:从命令行直接执行 vim 命令
#打开文件并跳到第 100 行
vim +100 file.txt
# 打开文件并搜索关键词
vim +/error app.log
# 打开文件并执行命令
vim -c “:%s/old/new/g” -c “:wq” file.txt
八、避坑指南

❌
坑1:打开文件后乱敲键盘,文件面目全非
最容易犯的错误:在普通模式下乱按,产生一堆奇怪字符。解决方法:
#不知道自己在哪个模式?
ESC # 先按 ESC 回到普通模式
u # 撤销刚才的操作
:q! # 如果改乱了,直接放弃保存退出
❌
坑2:粘贴代码格式全乱了
在 vim 里粘贴多行代码时,自动缩进会导致格式混乱:
#方法1:粘贴前关闭自动缩进
:set paste # 开启粘贴模式
粘贴内容…
:set nopaste # 关闭粘贴模式
# 方法2:用系统剪贴板
“+p # 从系统剪贴板粘贴(需要 vim 支持剪贴板)
❌
坑3:方向键在插入模式下出现乱码
某些终端或 vim 配置下,插入模式按方向键会出现 A/B/C/D 字符:
#原因:终端兼容性问题
# 解决:添加配置到 ~/.vimrc
set nocompatible
set backspace=indent,eol,start
❌
坑4:sudo 权限不足无法保存
忘记用 sudo 打开文件,改完了才发现没权限保存:
#不用退出重新打开,直接用这个技巧
:w !sudo tee % # 以 sudo 权限保存
# 然后按 L 加载新内容,再 :q 退出
❌
坑5:误按 Ctrl+z 让 vim 挂起
Ctrl+z 会把 vim 放到后台挂起,不是退出:
#vim 被 suspend 了
fg # 回到 vim(foreground)
jobs # 查看后台任务
❌
坑6:编辑中文件时被其他人修改了
vim 会提示文件已改变,同时显示警告:
#强制重新加载
:e! # 放弃当前修改,重新加载文件
# 或者用 view 只读打开
view file.txt # 等同于 vim -R
❌
坑7:忘记自己当前在哪个模式
vim 底部会显示当前模式(插入模式显示 — INSERT –)。如果不显示:
#添加到 ~/.vimrc
set showmode ” 显示当前模式
set showcmd ” 显示未完成的命令


总结
vim 的核心是模式切换:普通模式移动光标,插入模式输入文字,命令模式执行操作。搞懂这三种模式,vim 就入门了。
必须记住的 10 个命令:
i 插入 ESC回普通模式 :wq 保存退出 :q! 强制退出
dd 删除行 yy 复制行 p 粘贴 u 撤销 /词 搜索
:%s/a/b/g 全局替换
万能组合技:
ESC 回普通模式 → gg 回开头 → /关键词 搜索 → i 插入 → ESC → :wq 保存
收藏本文,下次服务器上改配置时翻出来对照,用多了自然就熟练了。
觉得有用?点赞 + 收藏 + 转发
LO
VE
怦然心动–往期推荐 ♥






下方扫码 关注我们


极客代码库
微信号丨
jkdmk_007
夜雨聆风