前言

Vim 是 Linux 系统自带的文本编辑器,也是每个开发者迟早要面对的工具。登录服务器修改配置文件、查看日志、写代码——不会 Vim 会非常痛苦。

本文不是百科全书,而是只讲你最常用的 20% 操作,覆盖 80% 的使用场景


一、理解 Vim 的三种模式

Vim 设计中最难适应的概念,也是最重要的概念:

1
2
3
4
5
6
7
8
9
10
11
12
┌──────────┐  i / a / o   ┌──────────┐
│ NORMAL │ ────────────→ │ INSERT │
│ (默认模式) │ ←──────────── │ (编辑模式) │
└──────────┘ Esc └──────────┘
↑ ↑
│ : / ? │
└──────────┬────────────┘

┌──────────┐
│ COMMAND │
│ (命令模式) │
└──────────┘
模式 进入方式 作用
NORMAL 打开文件 / 按 Esc 移动光标、复制粘贴、删除(默认模式)
INSERT i, a, o 输入文字
COMMAND :, /, ? 保存、退出、搜索、替换

🧠 核心思想:Vim 的 philosophy 是”大部分时间在 NORMAL 模式,只在需要输入文字时才进入 INSERT 模式”。


二、基本操作(必学)

2.1 打开和退出

1
2
3
vim file.txt              # 打开文件
vim +10 file.txt # 打开并定位到第 10 行
vim +/keyword file.txt # 打开并定位到关键词

退出(在 NORMAL 模式下):

1
2
3
4
5
:q         退出
:q! 强制退出(不保存)
:wq 保存并退出(= :x = ZZ)
:w 保存
:w file 另存为

2.2 进入编辑模式

1
2
3
4
5
6
i          在光标前插入
a 在光标后插入
o 在下方新建一行并插入
O 在上方新建一行并插入
I 行首插入
A 行尾插入

2.3 移动光标

1
2
3
4
5
6
7
h  ← 左移
j ↓ 下移
k ↑ 上移
l → 右移

# 为什么要用 hjkl?因为手指不需要离开主键盘区域,效率更高。
# 习惯之后你会发现方向键太远了!

进阶移动:

1
2
3
4
5
6
7
8
9
10
11
12
13
w          下一个单词开头
b 上一个单词开头
e 单词末尾
0 行首
^ 行首(第一个非空字符)
$ 行尾
gg 文件开头
G 文件末尾
10G 跳转到第 10 行(= :10)
Ctrl+f 向下翻页
Ctrl+b 向上翻页
Ctrl+d 向下翻半页
Ctrl+u 向上翻半页

三、编辑操作(核心)

3.1 删除

1
2
3
4
5
6
7
x          删除光标处字符
dd 删除整行
d$ 删除从光标到行尾
d0 删除从光标到行首
dw 删除一个单词
dG 删除到文件末尾
3dd 删除 3 行

3.2 复制和粘贴

1
2
3
4
5
6
yy         复制整行
y$ 复制到行尾
yw 复制一个单词
3yy 复制 3 行
p 在光标后粘贴
P 在光标前粘贴

3.3 撤销和重做

1
2
3
u          撤销
Ctrl+r 重做
U 恢复整行

3.4 修改(删除 + 进入插入模式)

1
2
3
4
5
cw         修改一个单词
c$ 修改到行尾
cc 修改整行
C 修改到行尾(= c$)
s 删除字符并插入

四、搜索和替换

4.1 搜索

1
2
3
4
5
6
/pattern       向下搜索
?pattern 向上搜索
n 下一个匹配
N 上一个匹配
* 搜索当前光标所在的单词(向下)
# 搜索当前光标所在的单词(向上)

4.2 替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 替换当前行第一个匹配
:s/old/new/

# 替换当前行所有匹配
:s/old/new/g

# 替换全文
:%s/old/new/g

# 替换全文,每次确认
:%s/old/new/gc

# 替换第 10-20 行
:10,20s/old/new/g

# 替换包含确认
:%s/old/new/gc
# 然后按 y=替换, n=跳过, a=全部替换, q=退出

五、实用组合技巧

5.1 多行操作

1
2
3
4
5
6
7
8
9
10
11
# 给多行添加注释 #
Ctrl+v 进入可视块模式
选中多行
Shift+i 进入插入模式
输入 #
按 Esc 应用到所有选中行

# 删除多行注释
Ctrl+v 进入可视块模式
选中 # 列
按 x 删除

5.2 缩进

1
2
3
4
>>          当前行右缩进
<< 当前行左缩进
>G 从当前行到文件末尾缩进
5>> 下面 5 行缩进

在 INSERT 模式下也可以用 Tab / Shift+Tab

5.3 文件操作

1
2
3
4
5
6
7
8
9
:e file.txt          打开另一个文件
:ls 列出打开的缓冲区
:bn 切换到下一个缓冲区
:bp 切换到上一个缓冲区
:bd 关闭当前缓冲区
:sp file.txt 水平分屏打开文件
:vsp file.txt 垂直分屏打开文件
Ctrl+w w 切换分屏窗口
Ctrl+w q 关闭分屏窗口

六、Vim 配置

Vim 的配置文件是 ~/.vimrc,一个适合初学者的基础配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
" ~/.vimrc — Vim 基础配置

" === 基础设置 ===
set number " 显示行号
set relativenumber " 显示相对行号(方便跳转)
set cursorline " 高亮当前行
set showmatch " 高亮匹配的括号

" === 缩进 ===
set tabstop=4 " Tab 显示宽度
set shiftwidth=4 " 缩进宽度
set expandtab " Tab 转为空格
set autoindent " 自动缩进

" === 搜索 ===
set hlsearch " 高亮搜索结果
set incsearch " 增量搜索(边输边搜)
set ignorecase " 搜索忽略大小写
set smartcase " 智能大小写(有大写字母时严格匹配)

" === 其他 ===
set encoding=utf-8 " 编码
set mouse=a " 鼠标支持(可点可拖!)
set clipboard=unnamed " 使用系统剪贴板
syntax on " 语法高亮

七、学习路线建议

第 1 天(10 分钟)

  • 会用 i 进入编辑,Esc 退出
  • 会用 hjkl 移动
  • 会用 :wq 保存退出
  • 会用 dd 删行,yy + p 复制粘贴

第 1 周(每天 5 分钟)

  • vimtutor(Vim 自带的教程)练习
  • 强迫自己在终端中只用 Vim,不用其他编辑器

第 1 个月

  • 学习搜索替换
  • 学习分屏操作
  • 安装 2-3 个插件(如 NERDTree)

常用操作速查卡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌─────────────── 移动 ───────────────┐
│ h← j↓ k↑ l→ w下词 b上词 │
│ 0行首 $行尾 gg开头 G末尾 │
│ Ctrl+f下页 Ctrl+b上页 │
├─────────────── 编辑 ───────────────┤
│ i前插 a后插 o下新行 O上新行 │
│ x删字符 dd删行 dw删词 │
│ yy复制 p粘贴 u撤销 Ctrl+r重做 │
│ cw改词 cc改行 │
├─────────────── 搜索 ───────────────┤
│ /搜 n下一个 N上一个 │
│ :%s/old/new/g 全文替换 │
├─────────────── 文件 ───────────────┤
│ :w保存 :q退出 :wq保存退出 │
│ :q!不保存退出 ZZ保存退出 │
└────────────────────────────────────┘

结语

Vim 的学习曲线确实陡峭,但一旦度过最初的不适应期,你会发现:

  • 编辑速度大幅提升(手不离键盘)
  • 登录服务器不再心慌
  • 享受极客感效率满足感

没有人天生会用 Vim。给自己一周时间,每天 5 分钟,你会发现一个新世界。⌨️