Vi/Vim 文本编辑器使用指南:指尖上的魔法
作者:书到用时方恨少!
发布日期:2026年4月13日
阅读时长:约18分钟
📌 写在前面
你是否曾面对黑漆漆的终端,看着 vim filename 后进入一个神秘界面,光标无法移动、字符无法输入,只能强行关闭终端窗口?是否曾因为服务器上只有 Vi 而手足无措,改个配置文件比登天还难?
Vim 被誉为"编辑器之神",它的学习曲线陡峭,但一旦掌握,编辑效率将呈指数级上升。它无需鼠标,双手不离开键盘,手指在字母间跳舞,犹如一场指尖上的魔法表演。这篇博客将用最直白的语言,带你走出 Vi/Vim 的迷雾,掌握那些"书到用时方恨少"的必备命令。
别再被 :q! 劝退了,让我们一起驯服这匹编辑器烈马!
1. 🧙 Vi 与 Vim:编辑器之神的前世今生
1.1 Vi 与 Vim 的关系
- Vi (Visual Interface) 是 Unix 系统的标准文本编辑器,诞生于 1976 年。
- Vim (Vi IMproved) 是 Vi 的增强版,增加了多级撤销、语法高亮、插件系统等强大功能。
现代 Linux 发行版中,输入 vi 通常会被重定向到 vim。你可以用 vim --version 确认。
1.2 为什么学习 Vim?
- 无鼠标操作:双手不离键盘,效率飞升。
- 服务器标配:几乎所有 Linux/Unix 系统都预装 Vi。
- 高度可定制 :通过
.vimrc配置成你专属的 IDE。 - 肌肉记忆:一旦形成,终身受用。
笔者曾用 Vim 在一个下午重构了三千行代码,手指翻飞的感觉,用过就回不去了。
2. 🚪 三大模式:Vim 的灵魂所在
Vim 最让人困惑的就是模式。它不像普通编辑器那样打开就能打字,而是分为三种主要模式。
| 模式 | 进入方式 | 作用 | 屏幕底部显示 |
|---|---|---|---|
| 普通模式 | Esc 或启动 Vim |
浏览、复制、删除、移动 | 空白或文件名 |
| 插入模式 | i, a, o 等 |
输入文本 | -- INSERT -- |
| 命令行模式 | : |
保存、退出、搜索、替换 | : 提示符 |
模式切换图:
启动 Vim
↓
[普通模式] ←(Esc)─ [插入模式]
↓ :
[命令行模式]

💡 任何时候不知道自己在什么模式,狂按
Esc回到普通模式准没错。
3. ✍️ 基础生存命令:至少能改配置文件
3.1 打开与退出
bash
vim filename # 打开文件(不存在则新建)
vim +10 filename # 打开文件并定位到第10行
vim +/pattern filename # 打开文件并定位到第一个匹配 pattern 的行
退出命令(命令行模式):
| 命令 | 作用 |
|---|---|
:q |
退出(未修改时) |
:q! |
强制退出,不保存修改 |
:w |
保存 |
:wq 或 :x |
保存并退出 |
ZZ |
(普通模式)保存并退出(相当于 :wq) |
ZQ |
(普通模式)强制退出不保存 |
🔥 生存口诀 :
i进入编辑,Esc退出编辑,:wq保存离开。
3.2 移动光标(普通模式)
Vim 的核心哲学是让手指保持在基准键位。
| 按键 | 移动方向 | 替代键 |
|---|---|---|
h |
左 | 方向键← |
j |
下 | 方向键↓ |
k |
上 | 方向键↑ |
l |
右 | 方向键→ |
进阶移动:
| 命令 | 作用 |
|---|---|
w |
跳到下一个单词开头 |
b |
跳到上一个单词开头 |
e |
跳到单词末尾 |
0 |
跳到行首 |
$ |
跳到行尾 |
gg |
跳到文件第一行 |
G |
跳到文件最后一行 |
:n |
跳到第 n 行 |
🧠 记忆方法 :
h在最左边,所以是左;l在最右边,所以是右;j像一个向下的钩子。
3.3 进入插入模式的多种姿势
| 命令 | 作用 |
|---|---|
i |
在光标前插入 |
I |
在行首插入 |
a |
在光标后插入(append) |
A |
在行尾插入 |
o |
在下一行新起一行插入 |
O |
在上一行新起一行插入 |
s |
删除当前字符并进入插入模式 |
S |
删除当前行并进入插入模式 |
用得最多的是
i,但o和A也很顺手。
4. ✂️ 编辑命令:效率从这里起飞
4.1 删除、复制、粘贴
Vim 中删除 = 剪切,被删除的内容会存入寄存器,可用 p 粘贴。
| 命令 | 作用 | 记忆技巧 |
|---|---|---|
x |
删除光标所在字符 | 像用橡皮擦 |
dd |
删除(剪切)整行 | d elete d |
yy |
复制整行 | y ank y |
p |
在光标后粘贴 | paste |
P |
在光标前粘贴 | |
dw |
删除一个单词 | delete word |
d$ 或 D |
删除到行尾 | |
d0 |
删除到行首 | |
u |
撤销 | undo |
Ctrl + r |
重做 | redo |
组合技示例:
text
yy → 复制当前行
p → 粘贴到下一行
dd → 剪切当前行
5dd → 剪切5行
y$ → 复制从光标到行尾的内容
💡 Vim 命令通常是
[数字] + 命令的形式,如3dw删除3个单词。
4.2 可视化模式
按 v 进入字符可视化模式,移动光标选中文本,然后执行操作。
| 命令 | 作用 |
|---|---|
v |
字符选择 |
V |
行选择 |
Ctrl + v |
块选择(列编辑) |
块选择实战:注释多行代码
text
Ctrl + v → 进入块选择模式
jjj → 向下选中多行
I → 进入插入模式,输入 #
Esc → 所有选中行行首都会添加 #
这个功能被称为"列编辑",简直是批量操作的神器!
4.3 查找与替换
查找(普通模式):
| 命令 | 作用 |
|---|---|
/pattern |
向下搜索 pattern |
?pattern |
向上搜索 pattern |
n |
跳转到下一个匹配 |
N |
跳转到上一个匹配 |
* |
向下搜索光标所在的单词 |
# |
向上搜索光标所在的单词 |
替换(命令行模式):
vim
:s/old/new/ " 替换当前行第一个匹配
:s/old/new/g " 替换当前行所有匹配
:%s/old/new/g " 替换整个文件所有匹配
:%s/old/new/gc " 替换整个文件,每次询问确认
:5,10s/old/new/g " 替换第5到第10行所有匹配
⚠️ 替换命令中的
/可以用其他字符代替,如:%s#old#new#g,当路径中含有/时特别有用。
5. 🧰 多文件与分屏操作
5.1 打开多个文件
bash
vim file1.txt file2.txt # 同时打开多个文件
在 Vim 内切换文件:
| 命令 | 作用 |
|---|---|
:n |
切换到下一个文件 |
:N 或 :prev |
切换到上一个文件 |
:ls |
列出所有缓冲区 |
:b 2 |
切换到编号为2的缓冲区 |
:bd |
关闭当前缓冲区 |
5.2 窗口分割
| 命令 | 作用 |
|---|---|
:sp [file] |
水平分割窗口,可选打开文件 |
:vsp [file] |
垂直分割窗口 |
Ctrl + w, w |
在窗口间切换 |
Ctrl + w, h/j/k/l |
切换到左/下/上/右窗口 |
Ctrl + w, + / - |
增加/减少窗口高度 |
Ctrl + w, > / < |
增加/减少窗口宽度 |
:q |
关闭当前窗口 |
🖥️ 分屏是查看多个文件的神器,配合
Ctrl + w系列快捷键,比 IDE 的标签页还顺手。
5.3 标签页
vim
:tabnew [file] " 新建标签页
:tabn " 下一个标签页
:tabp " 上一个标签页
gt " 普通模式下切换到下一个标签页
gT " 上一个标签页
6. ⚙️ 定制你的专属 Vim:.vimrc 配置
Vim 的强大在于可定制性,通过 ~/.vimrc 文件个性化设置。
6.1 基础配置示例
vim
" 语法高亮
syntax on
" 显示行号
set number
" 显示当前光标位置
set ruler
" 高亮搜索结果
set hlsearch
" 增量搜索(边输入边跳转)
set incsearch
" 自动缩进
set autoindent
set smartindent
" Tab 相关
set tabstop=4
set shiftwidth=4
set expandtab " 将 Tab 转换为空格
" 显示匹配的括号
set showmatch
" 启用鼠标支持(在某些终端下可用)
set mouse=a
" 编码设置
set encoding=utf-8
6.2 按键映射
vim
" 将 <leader> 键设为空格键
let mapleader = " "
" 保存文件的快捷键
nnoremap <leader>w :w<CR>
" 退出插入模式时禁用方向键(强迫使用 hjkl)
inoremap <Up> <Nop>
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
💡
nnoremap表示在普通模式下进行非递归映射。
7. 🚀 高级技巧与实用场景
7.1 宏录制:重复操作的自动化
按 q + 寄存器名(如 a)开始录制,再次按 q 结束录制。用 @a 执行宏。
场景:将多行文本统一添加引号和逗号。
text
qa → 开始录制到寄存器 a
I" → 行首插入 "
A", → 行尾插入 ",
j → 移动到下一行
q → 结束录制
10@a → 对接下来10行执行该宏
7.2 与 Shell 交互
| 命令 | 作用 |
|---|---|
:! command |
执行 Shell 命令,按回车返回 Vim |
:r !command |
将命令输出插入到光标位置 |
:sh |
临时进入 Shell,exit 返回 Vim |
示例:
vim
:r !ls -l " 将当前目录列表插入到文件中
:!python % " 运行当前 Python 文件
7.3 拼写检查
vim
:set spell " 开启拼写检查
]s " 跳转到下一个拼写错误
[s " 跳转到上一个拼写错误
z= " 查看拼写建议
zg " 将单词添加到个人词典
7.4 折叠代码
| 命令 | 作用 |
|---|---|
zf + 移动 |
创建折叠(如 zf5j 折叠下面5行) |
zo |
打开折叠 |
zc |
关闭折叠 |
za |
切换折叠状态 |
zR |
打开所有折叠 |
zM |
关闭所有折叠 |
8. 📊 常用命令速查表
| 操作 | 普通模式 | 命令行模式 |
|---|---|---|
| 进入插入 | i / a / o |
- |
| 保存 | ZZ |
:w |
| 退出 | ZQ |
:q / :q! |
| 保存并退出 | - | :wq / :x |
| 撤销 | u |
- |
| 重做 | Ctrl + r |
- |
| 复制行 | yy |
- |
| 剪切行 | dd |
- |
| 粘贴 | p / P |
- |
| 删除字符 | x |
- |
| 查找 | /text |
- |
| 替换 | - | :%s/old/new/g |
| 跳转到行首 | 0 |
- |
| 跳转到行尾 | $ |
- |
| 跳转到文件头 | gg |
- |
| 跳转到文件尾 | G |
- |
| 显示行号 | - | :set number |
| 执行 Shell | - | :!cmd |
| 分屏 | - | :sp / :vsp |
9. 🎯 总结
Vim 的学习就像学一门乐器,前期枯燥乏味,后期行云流水。不要试图一次性记住所有命令,先从生存命令开始:
- 用
vim file打开文件 - 按
i进入插入模式 - 编辑内容
- 按
Esc回到普通模式 - 输入
:wq保存退出
掌握了这五步,你就能在服务器上修改配置文件了。接下来逐步练习移动、复制粘贴、查找替换,假以时日,你也会爱上这种双手不离开键盘的高效感觉。
几个建议:
- 禁用方向键 :强迫自己用
hjkl,两周形成肌肉记忆。 - 每日一 Vim:每天学一个小命令,积少成多。
- 玩游戏 :终端输入
vimtutor进入官方教程,或者玩在线游戏 Vim Adventures。 - 配置
.vimrc:让编辑器更符合你的习惯。
最后,送上一句笔者喜欢的话:
"编辑器有两种:Emacs 和 Vi。一个是操作系统,一个是编辑器之神。"
愿你在 Vim 的世界里,游刃有余,指随心动!✨
本文采用 CC BY-NC-SA 4.0 协议,转载请注明出处。