从几分钟上手,到熟练编辑文本与代码

这份教程分为两条学习路径:先用“常用速成”学会打开、编辑、保存和退出;再按“详细教程”逐步掌握模式、移动、修改、搜索替换、窗口、配置与练习方法。遇到不确定的命令,先在小文件中试用,并记住 Vim 内置帮助可以随时查阅。

前言

Vim 是一款以键盘操作为核心的文本编辑器。它的关键特点是“模式”:普通模式用于移动和发出编辑命令,插入模式用于输入文字,命令行模式用于保存、退出、设置和搜索替换。初学者常觉得按键没有反应,通常是因为当前模式与预期不同。先看屏幕底部提示,按 Esc 回到普通模式,再继续操作。

本教程面向第一次使用 Vim 的读者,也适合把 Vim 当作代码编辑器的人。示例中的按键区分大小写;例如 x 与 X、w 与 W 是不同命令。尖括号表示特殊按键,例如 <Esc>、<Enter>、<Ctrl-r>,不需要真的输入尖括号。

官方资料

资料用途链接
Vim 网站学习Vi和VimsVim 实战教程
Vim 官方文档入口帮助文件、手册与相关资料索引Vim 官方文档入口
Vim 在线帮助可搜索的在线帮助页与参考手册Vim 在线帮助
用户手册目录按章节循序学习的 User Manual用户手册目录
Vim FAQ常见问题与解决方法Vim FAQ

在 Vim 内输入 :help 可打开帮助首页;输入 :help usr_02 可阅读第一步入门章节;输入 :help 某个命令(如 :help :w 或 :help dd)可查具体说明。按 Ctrl-] 可跟随帮助标签,按 Ctrl-o 可返回。

第一部分 常用速成

如果你只想尽快完成编辑,先记住下面这组操作。整个流程可以概括为:进入普通模式 → 移动与修改 → 保存 → 退出。

1 五分钟完成一次编辑

  1. 打开文件:在终端输入 vim 文件名,例如 vim notes.txt。文件不存在时,Vim 会准备创建它。
  2. 进入插入模式:按 i,在光标前开始输入;也可以按 a 在光标后输入,按 o 在下一行新建一行并开始输入。
  3. 结束输入:按 Esc。回到普通模式后,底部通常不再显示 -- INSERT --。
  4. 保存:输入 :w,再按 Enter。
  5. 退出:输入 :q,再按 Enter。若已保存且没有未保存改动,也可以输入 :wq 一次保存并退出。
vim notes.txt    # 打开或新建文件
i              # 开始输入
<Esc>          # 返回普通模式
:w             # 保存
:q             # 退出

常见退出命令::q 在没有未保存修改时退出;:q! 放弃本次未保存修改并强制退出;:wq 保存后退出。:q! 会丢弃当前文件未保存的改动,使用前确认确实不需要这些内容。

2 最常用的移动与编辑键

按键作用记忆提示
h / j / k / l左 / 下 / 上 / 右移动一格基础方向键;也可用方向键
w / b / e跳到下一个词首 / 上一个词首 / 当前词尾小写词以空格和标点等边界区分
0 / ^ / $行首 / 行内第一个非空白字符 / 行尾^ 常用于缩进代码的行首
gg / G文件第一行 / 最后一行跳到文件两端
数字G跳到指定行,例如 25G也可用 :25
x / X删除光标字符 / 删除前一个字符像 Delete / Backspace
dd / yy / p剪切当前行 / 复制当前行 / 在光标后粘贴Vim 将删除内容放入寄存器
u / Ctrl-r.撤销 / 重做 / 重复上次修改命令
i / a / o光标前插入 / 光标后插入 / 下方新行插入按 Esc 结束输入
r / R替换一个字符 / 连续替换r 后按一个替换字符

数字可以与多数动作组合:3w 向前跨过三个词;5j 向下移动五行;2dd 删除两行;3p 粘贴三次。初学阶段先熟悉少量可靠组合,避免盲目输入不熟悉的命令。

3 搜索与快速修改

操作示例说明
向后搜索/error 然后 Entern 到下一个匹配,N 到上一个匹配
向前搜索?warning 然后 Enter搜索方向与 / 相反
清除搜索高亮:nohlsearch清除当前高亮;可配置为按键映射
替换当前行第一个匹配:s/旧/新/例如 :s/cat/dog/
替换当前行所有匹配:s/旧/新/gg 表示本行全部匹配
替换整个文件:%s/旧/新/g% 表示所有行
逐个确认替换:%s/旧/新/gcc 会询问是否替换每一处

正则表达式中的特殊字符有额外含义。若要按字面查找这些字符,需转义或使用 very nomagic 模式;不确定时可先使用 :%s/旧/新/gc 逐项确认。

4 速查:最常见的命令行命令

命令作用
:w保存
:w 文件名另存为指定文件
:q退出
:wq 或 :x保存并退出
:q!不保存并强制退出
:e 文件名打开另一个文件
:set number显示行号
:set nonumber隐藏行号
:help打开帮助
:!命令在 Vim 中执行外部命令,例如 :!ls

第二部分 详细教程

本部分从操作模型开始,逐章介绍常见编辑任务。建议边读边在练习文件中操作,而不是只背命令。每条操作都可以拆成“动作范围 + 操作”:例如 dw 表示删除从光标开始的一个词,d$ 表示删除到行尾。

1 Vim 的模式与操作思路

模式进入方式主要用途退出或切换
普通模式启动 Vim 后默认进入;Esc 返回移动光标、删除、复制、粘贴、执行组合命令按 i/a/o 等进入插入模式;按 : 进入命令行
插入模式i、a、o、I、A、O、s、c 等输入和修改文本Esc 回普通模式
可视模式v(字符)、V(行)、Ctrl-v(块)选择文本区域,再操作选择内容Esc 取消选择
命令行模式:、/、?保存、退出、设置、搜索、替换Enter 执行;Esc 取消
替换模式R逐字覆盖已有文本Esc 结束

理解模式比死记按键更重要。普通模式下按 i 是“进入输入”,插入模式下按 i 则是输入字母 i。若按键行为不符合预期,按 Esc 回到普通模式,确认屏幕状态后再操作。

2 打开文件与退出

vim file.txt              # 打开文件
vim file1.txt file2.txt   # 一次打开多个文件
vim +42 file.txt          # 打开后跳到第 42 行
vim +/TODO file.txt       # 打开后定位到 TODO

退出前先判断是否有未保存内容。Vim 通常会在状态信息中提示文件已修改。:w 保存当前文件,:q 退出,:wq 保存并退出;:q! 强制放弃改动。:qa 退出所有窗口;:wqa 保存所有文件并退出。遇到“有未保存修改”提示,不要反复按 q!,先确认是否需要保存。

3 移动光标与定位

命令含义
h j k l左、下、上、右移动;同一命令前可加数字
w / b / e下一个词首 / 上一个词首 / 当前词尾
W / B / E按空白字符划分的大词移动
0 / ^ / $行首 / 首个非空白字符 / 行尾
gg / G / nG第一行 / 最后一行 / 第 n 行
{ / }向上 / 向下移动一个段落(按空行等边界)
H / M / L屏幕顶部 / 中部 / 底部附近
Ctrl-f / Ctrl-b向下 / 向上翻一屏
Ctrl-d / Ctrl-u向下 / 向上翻半屏
%在括号、方括号、花括号等匹配符之间跳转

精确定位行号也可使用 :42;输入 :set number 可以显示行号。若长行在屏幕上折行显示,gj 和 gk 按屏幕显示行移动,j 和 k 则按文件中的实际行移动。

4 插入、追加与替换文本

命令操作
i / a在光标前插入 / 在光标后追加
I / A在本行第一个非空白字符前 / 行尾追加
o / O在下方 / 上方新建一行并进入插入模式
s / S替换光标字符并插入 / 替换整行内容并插入
r{字符}将光标处单个字符替换为指定字符
R进入连续覆盖模式
C删除光标到行尾并进入插入模式

在插入模式中,Backspace、方向键等行为会受终端、配置和 Vim 版本影响。尽量用普通模式完成定位,再进入插入模式输入,这样更容易保持操作可控。

5 删除、复制、剪切与粘贴

Vim 的 d、y、c 是操作符:它们后面接一个移动命令来决定范围。d 表示删除,y 表示复制(yank),c 表示删除并进入插入模式。重复操作符表示整行,例如 dd、yy、cc。

命令结果备注
dw / daw删除到下个词首 / 删除整个词(含周围空格的文本对象)
d$ 或 D删除到行尾
d0删除到行首
dd / 3dd删除一行 / 删除三行
yy / 3yy复制一行 / 复制三行
p / P在光标后 / 前粘贴;行内容会粘到下一行 / 上一行
x / X删除字符 / 删除光标前字符
ciw修改光标所在的词:删除词并进入插入模式
di(删除括号内内容;da(连同括号删除

文本对象通常由 i(inside,内部)或 a(around,包含边界)加对象组成,例如 ci" 修改引号内内容,da{ 删除一对花括号及其中内容(具体对象和语法支持取决于 Vim)。

6 撤销、重做与重复

按键作用
u撤销最近一次修改
Ctrl-r重做刚撤销的修改
.重复上一次普通模式的修改命令
U撤销本行最近一次修改(行为受版本和配置影响;初学优先用 u)
Ctrl-g u在插入模式下断开撤销块,适合将一串输入拆成独立撤销步骤

建议每完成一个小步骤就检查结果。若误操作,尽早按 u 撤销;若撤销过头,按 Ctrl-r 恢复。Vim 的撤销历史通常按编辑会话管理,是否跨会话保留取决于持久撤销配置。

7 搜索与替换详解

  1. 按 / 输入要找的文字并回车,向文件后方搜索;按 ? 则向前搜索。
  2. 按 n 跳到下一个匹配,N 跳到相反方向的上一个匹配。
  3. 使用 :s/旧/新/ 替换本行第一个匹配;加 g 替换本行全部匹配。
  4. 使用 :%s/旧/新/g 替换全文件;若结果重要,改用 :%s/旧/新/gc 并逐项确认。
:s/foo/bar/       " 本行第一个 foo
:s/foo/bar/g     " 本行所有 foo
:%s/foo/bar/g    " 全文件所有 foo
:%s/foo/bar/gc   " 全文件逐个确认
:10,20s/foo/bar/g " 第 10 到 20 行

命令结构可读作 :范围 s/查找/替换/标志。范围常用 . 表示当前行、表示末行、 表示末行、% 表示全文;例如 :.,s/a/b/g 从当前行替换到文件末尾。搜索模式支持正则表达式,斜杠本身出现在模式中时需转义或换用其他分隔符。

8 可视模式与批量操作

按键选择方式常见用途
v字符区域选中一段文字后按 d 删除、y 复制、c 修改
V整行区域选择多行后统一缩进或删除
Ctrl-v矩形块区域对齐列、批量插入或删除
gv重新选中上一次的区域重复相似的批量操作
> / <增加 / 减少缩进通常对所选行生效;按两次可缩进整行

块选择后按 I 可在每行前插入文字;输入完成后按 Esc,Vim 会将输入应用到选中的各行。若终端不支持 Ctrl-v 或把它用作粘贴键,可使用 :set virtualedit=block、图形版 Vim,或改用替代流程。

9 多文件、缓冲区与窗口

Vim 中的缓冲区是编辑中的文件内容;窗口是显示缓冲区的视口;标签页则是一组窗口布局。理解这三个概念有助于在多个文件间切换。

命令作用
:e file在当前窗口打开文件
:ls列出缓冲区
:bnext / :bn切换到下一个缓冲区
:bprevious / :bp切换到上一个缓冲区
:b 文件名片段切换到匹配的缓冲区
:split file 或 :sp file水平分屏
:vsplit file 或 :vsp file垂直分屏
Ctrl-w h/j/k/l切换到左 / 下 / 上 / 右侧窗口
:q关闭当前窗口
:tabnew file打开新标签页并加载文件
gt / gT下一个 / 上一个标签页

窗口尺寸:Ctrl-w = 尽量均分,Ctrl-w + 增高,Ctrl-w - 减高,Ctrl-w > 和 Ctrl-w < 调整宽度。命令中的空格表示先按 Ctrl-w 组合键,再按后续字母。

10 配置与常用设置

Vim 的用户配置通常放在 ~/.vimrc;Windows 环境可使用 $HOME/_vimrc 或 Vim 识别的配置路径,具体取决于安装方式。配置行可直接在普通模式输入冒号命令执行,也可以写进配置文件,每次启动生效。

set number          " 显示行号
set relativenumber  " 显示相对行号
set ignorecase      " 搜索默认忽略大小写
set smartcase       " 搜索含大写字母时区分大小写
set incsearch       " 输入搜索词时即时跳转
set hlsearch        " 高亮所有匹配
set expandtab       " Tab 输入为空格
set tabstop=4       " 文件中的 Tab 显示宽度
set shiftwidth=4    " 自动缩进宽度
set autoindent      " 延续上一行缩进
syntax on           " 语法高亮(部分发行版默认已启用)

若配置修改后不生效,可在 Vim 中输入 :source $MYVIMRC 重新加载。:set 命令可以查看或临时修改设置,例如 :set number。不同版本、发行包及终端能力会影响部分选项的效果。

11 寄存器与系统剪贴板

Vim 的复制和删除内容通常进入寄存器。未指定寄存器时使用默认寄存器;命名寄存器可用双引号指定,例如 "ayy 将当前行复制到 a 寄存器,"ap 从 a 寄存器粘贴。系统剪贴板一般通过 + 或 * 寄存器访问,但需要 Vim 编译时包含 clipboard 支持,且终端或图形环境必须提供相应能力。

"ayy       " 将当前行复制到 a 寄存器
"ap        " 粘贴 a 寄存器内容
"+yy       " 复制整行到系统剪贴板(需支持 +clipboard)
"+p        " 从系统剪贴板粘贴

可用 :version 查看编译特性;若输出中没有 +clipboard,系统剪贴板寄存器可能不可用。

12 宏与重复任务

宏可以记录一组按键并重复执行。先将光标移到合适位置,按 qa 开始录制到 a 寄存器;完成操作后按 q 停止;按 @a 播放一次,按 @@ 重放最近一次宏。也可用 10@a 执行十次。

qa        " 开始录制到寄存器 a
...       " 执行要重复的操作
q         " 结束录制
@a        " 播放宏 a
@@        " 再次播放上一个宏

宏会忠实重放按键,因此应先在少量、结构一致的内容上试运行,并在批量执行前保存或确认可撤销。若每一行结构不完全相同,宏可能移动到错误位置。

13 常见问题排查

现象处理方法
输入的字母没有写进文件按 i 或 a 进入插入模式;确认屏幕有 -- INSERT -- 提示
不知道如何退出先按 Esc,再输入 :q 并回车;有未保存内容时先选择保存或 :q!
方向键插入 A/B/C 等字符多见于终端或兼容配置问题;先用 h/j/k/l,检查终端设置和 Vim 版本
粘贴代码后缩进乱掉粘贴前尝试 :set paste,完成后 :set nopaste;现代版本也可使用系统剪贴板粘贴
替换范围弄不清使用 :%s/旧/新/gc 逐个确认,或先对少量行验证
命令行输错了按 Esc 取消;在命令行中可用 Backspace 编辑后再执行
误删或误改立即按 u;如果撤销过头,按 Ctrl-r 重做
文件显示乱码检查文件编码;可用 :set fileencoding? 查询,必要时用 :edit ++enc=utf-8 文件名 重新打开

14 新手练习路线

  1. 练习一:新建 scratch.txt,输入三行文字,保存并退出。
  2. 练习二:用 gg、G、0、^、$ 定位;用 3j、2w 练习带数字的移动。
  3. 练习三:用 dd 删除一行、yy 和 p 复制粘贴,再用 u 恢复。
  4. 练习四:用 / 查找一个词,用 n/N 浏览匹配;用 :%s/旧/新/gc 逐个确认替换。
  5. 练习五:用 V 选中多行,按 > 增加缩进;用 Ctrl-v 选中矩形后批量插入字符。
  6. 练习六:打开两个文件并分屏,用 Ctrl-w h/j/k/l 切换窗口,再用 :ls 与 :bn 切换缓冲区。

熟练的目标不是记住所有 Vim 命令,而是建立稳定习惯:不确定时按 Esc 回到普通模式;先确认作用范围再执行修改;善用 u 撤销;用 :help 查命令;把频繁使用的设置逐步写入配置文件。

附录 常用按键一览

类别快速记忆
模式Esc 回普通模式;i/a/o 输入;v/V/Ctrl-v 选择
保存退出:w 保存;:q 退出;:wq 保存退出;:q! 放弃改动退出
移动h j k l;w/b;0/^/$;gg/G;nG
修改x 删除字符;dd 删除行;yy 复制行;p/P 粘贴;u 撤销;Ctrl-r 重做
搜索/词、?词;n/N 下一个/上一个;:%s/a/b/gc 全文逐个确认
帮助:help;:help 命令;Ctrl-] 跳帮助标签;Ctrl-o 返回

常见任务组合

目标操作顺序
修改整行内容将光标放在行内,按 cc,输入新内容,再按 Esc。
修改光标所在单词按 ciw,输入替换内容,再按 Esc。
删除括号内内容将光标放入括号内,按 di(;需要连括号一起删时按 da(
在多行前添加相同字符按 Ctrl-v 选中多行的列位置,按 I,输入字符,按 Esc。
全文替换但先检查结果输入 :%s/旧内容/新内容/gc,逐项按 y 确认或 n 跳过。
复制当前行并在下方插入按 yy 复制整行,再按 p 粘贴到下一行。
快速到文件末尾并另存按 G 到末行,输入 :w 新文件名 并回车。

批量修改前先在练习文件中操作;范围较大的替换可逐项确认,确保修改目标正确。