vim 编辑器

本文合并自:04-vim编辑器.md、01-Linux基础.md、1-1-Linux基础与命令行使用手册.md

本文系统整理 vim 编辑器的三种工作模式、打开文件与光标定位、命令(普通)模式下的移动与编辑操作、插入模式的进入方式、末行模式的保存退出/行号/查找替换/分屏/读写文件、可视模式、多文件与多窗口编辑、.vimrc 配置、异常退出与 .swp 恢复,并附速查表与课堂练习题。


一、vim 简介与三种模式

1.1 vi 与 vim

vi 是 UNIX/Linux 上的经典文本编辑器,vim 是其增强版(Vi IMproved),现在各版本 Linux 基本都自带 vim。

安装:

sudo yum install vim -y

1.2 三种工作模式

vim 共分为三种工作模式:普通模式(Normal mode,又称命令模式)、编辑模式(含插入模式 Insert mode 与替换模式 Replace mode)、命令行模式(Command-line mode,又称末行模式)。

模式 说明 进入方式
普通模式(命令模式,默认) 打开文件后默认进入的模式,用于移动光标、删除、复制、粘贴、查找、替换等快捷操作;可视模式也属于普通模式的延伸 启动 vim 后即处于该模式;其他模式下按 Esc 回到普通模式
编辑模式(插入模式) 可直接输入、修改文本内容,包含插入模式和替换模式 在普通模式下按 i、I、a、A、o、O、s、S、R、C 等键进入
命令行模式(末行模式) 输入以 :、/、? 开头的命令,用于保存、退出、打开文件、分屏、查找、替换、设置等文档级/扩展操作 在普通模式下输入 :、/、? 进入

1.3 模式切换

vim newfile                # 新建并打开文件

普通模式 → 编辑模式:i a A I s S R o O C
编辑模式 → 普通模式:Esc
普通模式 → 命令行模式:: 或 / 或 ?
命令行模式 → 普通模式:Esc 或 回车执行后自动返回

切换示意图:

           i / I / a / A / o / O
普通模式 ─────────────────────────► 插入模式
   ▲                                   │
   │               Esc                 │
   └───────────────────────────────────┘

   : / / / ?
普通模式 ─────────────► 命令行模式
   ▲                        │
   │       Esc / 回车        │
   └────────────────────────┘

二、打开文件

2.1 基本打开方式

vim 文件路径

例如:

vim /test/123.txt

2.2 打开时的光标定位与启动参数

命令 作用
vim +行号 文件名 进入文件后光标直接定位到指定行
vim 文件名 +21 打开文件时光标直接跳到第 21 行(等效写法)
vim a.txt +42 打开 a.txt 并定位到第 42 行
vim +/词 文件名 进入文件后光标定位到第一个出现指定词的行
vim 文件1 文件2 同时打开多个文件
vim -o a.txt b.txt 横向分屏打开多个文件
vim -O a.txt b.txt 竖向分屏打开多个文件
vim ~/.vimrc +157 打开配置文件并定位到第 157 行(修改配色时常用)

三、命令模式(普通模式)

3.1 光标移动:字符与单词

按键 作用
h 光标向左移动一个字符
l 光标向右移动一个字符
j 将光标移动到下一行
k 将光标移动到上一行
w 移动到下一个单词的词首
b 移动到上一个单词的词首
e 移动到下一个单词的词尾
W / B / E 同 w/b/e,但以 .、-、) 等字符为分隔
f字符 跳到本行光标之后第一个该字符的位置
F字符 跳到本行光标之前第一个该字符的位置
t字符 类似 f,但光标停在目标字符前一个位置
T字符 类似 F,但光标停在目标字符后一个位置
% 跳到匹配的括号处

3.2 行内定位

按键 作用
0 数字 0(非字母 o),将光标移动到当前行行首第一列(含空白符)
^ 定位到当前行第一个有效字符(跳过行首空白)
$ 将光标移动到当前行的最后一个字符;8$ 表示移动到从光标所在行往下数第 8 行的最后一个字符处
+ 将光标移动到下一行的行首

3.3 翻页与屏幕内定位

按键 作用
Ctrl + f(或 Page Down) 向下(向前)翻一整页
Ctrl + b(或 Page Up) 向上(向后)翻一整页
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
H 光标移动到当前页第一行(屏幕顶端)的第一个字符处
M 光标移动到当前页中间那行的第一个字符处
L 光标移动到当前页最下方那行的第一个字符处;2L 表示移动到当前页倒数第二行的行首
zt 将当前行置于屏幕顶端
zz 将当前行置于屏幕中间
zb 将当前行置于屏幕底端

3.4 文件级跳转与位置标记

按键/命令 作用
gg 将光标移动到文件的第一行行首
G 移动到文件的最后一行
nG n 为数字,移动到文件的第 n 行
n<Enter> n 为数字,光标向下移动 n 行
:10 定位到第 10 行
Ctrl + o 跳到上一次光标位置
Ctrl + i 与 Ctrl + o 相反,跳到更新的位置
'' 在上一次光标位置和当前位置之间来回跳转
ma 用 m 加字母做有名标记(如标记 a)
'a 用 ' 加字母跳回对应标记处
:marks 查看标记列表
Ctrl + g 在窗口下方显示当前位置、文件名等信息

3.5 删除字符与行

按键 作用
x 删除光标所在(光标下的)字符,相当于 dl;4x 表示删除光标及向右数的 4 个字符
X 与小写 x 相反,删除光标前的字符,相当于 dh
dd 删除光标所在行
数字 + dd 删除多行,如 10dd 删除 10 行
dw 删除一个单词
D 从光标位置开始删除到该行行尾,相当于 d$
d^ 删除光标前到行首第一个有效字符之间的内容
d0 从光标位置开始删除至行首第一列
dH 删除光标所在行开始至本页顶部的所有行
dL 删除光标所在行至该页最后一行

c 系列操作与 d 类似,区别是删除后直接进入插入模式,例如 cw 删除一个单词并进入插入模式,cc 删除整行并进入插入模式,cl 删除光标下字符并进入插入模式。

3.6 复制、剪切与粘贴

按键 作用
yy 复制光标所在行
数字 + yy 复制多行,如 3yy 表示从光标所在行向下复制 3 行(含该行)、10yy 复制 10 行
yw 复制一个单词(光标需在单词开头)
p 粘贴到光标后面(在光标所在位置的下一行粘贴已复制的内容)
P 粘贴到光标前面(上一行)

在可视模式下用 d 删除相当于剪切,再按 p 即可粘贴。

3.7 撤销、重做与重复

按键 作用
u 撤销,取消刚才的删除或插入命令(撤销上一次操作)
U 撤销对当前行的所有修改
Ctrl + r 重做(撤销的反操作)
. 重复上一次命令

3.8 字符替换与大小写

按键 作用
r 替换光标位置的单个字符
R 进入替换模式,连续覆盖输入
~ 切换光标下字符的大小写
s 删除光标下字符并进入插入模式(相当于 cl)
S 删除整行并进入插入模式(相当于 cc)

3.9 合并行

按键 作用
J (大写)将多行合并为一行;3J 表示将光标所在行(含该行)往下共 3 行合并成一行

3.10 查找

按键/命令 作用
/word 向下(向后)查找名为 word 的字符串,回车后高亮匹配
?word 向上(向前)查找名为 word 的字符串
n 英文小写 n,重复上一次的查找(同方向),跳到下一个匹配
N 英文大写 N,重复上一次查找但反向;若上一次使用 /word,按 N 即相当于 ?word
/\<the 查找以 the 开头的单词
/the\> 查找以 the 结尾的单词
/t.e . 通配任意单个字符
* 查找光标下的单词
:noh 取消查找结果的高亮

3.11 折叠

按键 作用
zf 创建折行(折叠)
zc 折叠
zo 打开折叠

四、插入模式(编辑模式)

在普通模式下按下列按键可进入插入模式:

按键 作用
i 从光标所在字符处(光标前)开始插入
I 移动到光标所在行的行首开始插入
a 从光标所在字符的后一个字符处(光标后)开始插入
A 移动到光标所在行的行尾开始插入
o 从光标所在行的下一行新建一行并开始插入
O 从光标所在行的上一行新建一行并开始插入
s 删除光标下字符后进入插入模式
S 删除整行后进入插入模式
R 进入替换模式(覆盖式输入)
C 删除光标到行尾内容后进入插入模式

进入插入模式后可直接输入文本;按 Esc 返回普通模式。


五、末行模式(命令行模式)

在普通模式中输入 :、/、? 即可进入命令行模式。

5.1 保存与退出

命令 作用
:w 保存
:q 退出
:wq 保存并退出
:w! 强制保存(不退出)
:wq! 强制保存并退出
:q! 不保存,强制退出
:qall 退出所有正在编辑的文档
:wqall 保存并退出所有文档
ZZ 在普通模式下直接保存并退出(不加强制符号)

! 表示强制执行。

5.2 行号显示

:set nu          " 显示行号
:set nonu        " 取消行号

5.3 字符串替换

:g 全局命令形式:

命令 作用
:g/root/p 打印所有包含 root 字符串的行
:g/root/s//txt/ 将文件中首次出现的 root 字符串替换为 txt
:g/root/s//txt/g 将文件中所有 root 字符串全部替换为 txt(同一行出现多次也全部替换)
:g/^/s//test/g 在文件每一行开头插入 test 字符串(^ 表示行首)

:s 范围替换形式:

:s/if/hello/                " 替换当前行第一个 if
:1,$s/if/hello/             " 第 1 行到最后一行,每行只替换第一个 if
:1,$s/root/ROOT/g           " 第 1 行到最后一行,将所有 root 替换为 ROOT(全文替换)
:%s/old/new/g               " 全文替换(% 等价于 1,$)
:10,20s/root/ROOT/g         " 仅在 10~20 行范围内替换

也可以先在可视模式下选中范围,再按 :,输入 s/root/ROOT/g 对选区进行替换。

5.4 另存、读取与执行外部命令

命令 作用
:w newfilename 将修改后的内容另存为新文件(newfilename 替换为自定义文件名)
:w /tmp/new.file 另存为到 /tmp/new.file
:r 其他文件 将其他文件的内容读取/追加到正在编辑的文件中(光标位置之后)
:r 1.txt 将 1.txt 的内容导入当前文档
:r! ls 执行 ls 命令并将其标准输出导入当前文档
:! shell命令 执行 Shell 命令
:r! shell命令 执行 Shell 命令并将结果插入到光标位置

5.5 分屏

命令 作用
:sp /tmp/hello.txt 横向分屏打开文件
:vsp /tmp/hello.txt 竖向分屏打开文件
:split 横向分屏
3split 横向分屏并指定新窗口高度为 3
:vsplit 竖向分屏
3vsplit 竖向分屏并指定新窗口宽度为 3
Ctrl + w w 在分屏窗口之间切换

启动时直接分屏打开多个文件:

vim -o a.txt b.txt          # 横向分屏打开
vim -O a.txt b.txt          # 竖向分屏打开

六、可视模式

可视模式用于选取文本区域,再配合删除、复制、替换等操作。

按键 作用
v 按字符选取
V 按行选取
Ctrl + v 按列(块)选取
ggVG 全选(跳到首行后按行选取到末行)

可视模式下的典型操作:

  • vjjjjd:选中若干字符后按 d 删除。
  • d 与 p 组合:可视模式下 d 删除相当于剪切,再按 p 可粘贴。
  • 交换两个字符:先用 x 删除一个字符,再用 p 粘贴。
  • 跨终端复制:进入可视模式选中内容后,按 "y 复制、"p 粘贴。
  • 多行快速注释(依赖配置/插件):Shift + v 选中行后按 ,cc 注释,按 ,cu 取消注释。
  • 区域替换:选中范围后按 :,输入 s/root/ROOT/g。

七、多文件编辑

7.1 打开与切换文件

打开多个文件后,可在命令行模式下使用 :e 在文件之间切换:

:e 文件2                    " 打开/切换到另一个文件
:e /etc/passwd              " 打开指定文件

依此类推,可切换至下一个文件。

7.2 缓冲区与标签页

:ls                         " 列出缓冲区
:bn                         " 切换到下一个缓冲区
:bp                         " 切换到上一个缓冲区
:tabnew /tmp/hello.txt      " 新建标签页打开文件
gt                          " 切换到下一个标签页
gT                          " 切换到上一个标签页

配合分屏(:sp、:vsp、Ctrl + w w)可同时查看和编辑多个文件,详见「五、末行模式 → 5.5 分屏」。


八、vim 配置(.vimrc)

8.1 配置文件位置

级别 路径
全局配置 /etc/vimrc
用户配置 ~/.vimrc

例如将下面内容写入配置文件,重启 vim 后默认显示行号:

set nu

8.2 常用编辑选项

在命令行模式中临时使用,或写入 ~/.vimrc 永久生效:

选项 作用
set number / set nu 显示行号
set nonumber / set nonu 关闭行号(选项前加 no 表示关闭)
set ruler 在右下角显示当前光标位置
set autoindent 新行自动沿用上一行缩进
set nocompatible 不完全与 Vi 兼容(关闭 vi 兼容模式),确保使用 vim 增强特性
set nowrap 长行不自动折行
set list 显示制表符等不可见字符
syntax enable 打开语法高亮
colorscheme evening 切换颜色(配色)方案
set ignorecase 查找时忽略大小写
set hlsearch 高亮查找结果
set incsearch 输入字符时即时跳转匹配
set nowrapscan 查找到文件头尾即停止(不循环)
filetype plugin indent on 自动识别文件类型并启用对应插件与缩进

典型 ~/.vimrc 片段:

set nu                  " 显示行号
set ruler               " 右下角显示光标位置
set autoindent          " 自动缩进
set nocompatible        " 关闭 vi 兼容模式,启用 vim 增强特性
set nowrap              " 长行不自动折行
syntax enable           " 开启语法高亮
colorscheme evening     " 使用 evening 配色方案

8.3 其他实用命令

map <F5> ihello<ESC>       " 键盘映射:按 F5 插入 hello
:marks                     " 查看标记列表
:scriptnames               " 查看已加载的 vim 脚本及其位置
:options                   " 在新窗口中列出所有选项及说明
:! shell命令               " 执行 Shell 命令
:r! shell命令              " 执行 Shell 命令并将结果插入到光标位置

8.4 从 NFS 安装高级 vim 配置(课程环境)

课程中通过 NFS 挂载教师机上的共享目录获取配置包:

mkdir ~/0_important
sudo mount 192.168.0.183:/soul /mnt
cd /mnt/software
cp vim ~/0_important/ -rfv
cd ~/0_important/vim
./linux_install.sh

安装后修改配色方案:

vim ~/.vimrc +157
"colorscheme solarized
colorscheme exlightgray

九、异常退出与 .swp 交换文件恢复

vim 编辑文件时会在同目录生成交换文件(如编辑 test.txt 会生成隐藏文件 .test.txt.swp),用于保存未写盘的修改。若 vim 因终端断开、进程被杀、系统崩溃等原因异常退出,交换文件不会被自动清理,再次打开同一文件时会出现 E325: ATTENTION 警告,并提示 swap 文件已存在。

常见处理选项:

选项 含义
O(Open Read-Only) 以只读方式打开
E(Edit anyway) 忽略交换文件直接编辑(有覆盖风险)
R(Recover) 从交换文件恢复上次未保存的内容
D(Delete it) 删除该交换文件
Q(Quit) 退出 vim
A(Abort) 中止

命令行恢复流程:

vim -r test.txt             # 从交换文件恢复文件内容
# 确认内容正确后保存退出,再删除残留的交换文件
ls -a                       # 查看隐藏的 .swp 文件
rm -f .test.txt.swp

恢复完成并确认内容无误后,务必删除 .swp 文件,否则每次打开该文件都会继续提示。


十、关键速查表

任务 命令/按键
保存退出 :wq
强制退出(不保存) :q!
撤销 u
重做 Ctrl + r
复制一行 yy
删除一行 dd
粘贴 p
跳转到行尾 $
跳转到文件首 gg
跳转到文件尾 G
显示行号 :set nu
查找 /关键字
全文替换 :%s/old/new/g
全选 ggVG

十一、练习题

练习 1:vim 综合操作

  1. 在 /tmp 目录下新建一个名为 vitest 的目录。
  2. 进入 vitest 目录中。
  3. 将 /etc/man.config 拷贝到该目录中。
  4. 使用 vim 打开 man.config 这个文件。
  5. 在 vim 中设置行号。
  6. 移动到第 58 行,向右移动 40 个字符,请问你看到的内容是什么?
  7. 移动到第一行,并且向下查找一下 bzip2 这个字符串,请问它在第几行?
  8. 将文件中所有的 man 改为 MAN,请问一共有几个?
  9. 修改完成后,请将其复原。
  10. 复制第 65 到 73 行的内容,并粘贴到文件尾部。
  11. 将文件中以 # 号开头的行,把开头的 # 号删除。
  12. 在第一行新增一行,将自己的名字写进去。
  13. 保存后退出。

练习 2:用 vim 创建文件并配合软链接

  1. 使用 vim 创建一个普通文件 test.txt,内容为 hello world。

    vim test.txt
  2. 创建一个软链接指向 test.txt。

    ln -s test.txt test_link
  3. 通过软链接修改文件内容,验证源文件同步变化。

课后作业

反复练习本章所有 vim 快捷键,重点掌握:三种模式切换、光标定位、复制/删除/粘贴、查找替换、可视模式选取、分屏与多文件编辑,以及 ~/.vimrc 的基本配置。

最后修改:2026 年 09 月 20 日
如果觉得我的文章对你有用,请随意赞赏