跳到主要内容

Vim 模式详解

模式(Mode)是 Vim 最核心的概念,也是 Vim 与其他编辑器最大的区别。理解模式是掌握 Vim 的第一步。

为什么需要模式?

普通编辑器始终处于插入模式——你按下什么键,就在文档中输入什么字符。这种方式简单直观,但效率有限。

Vim 采用模式化编辑的设计理念:

  • 普通模式下,按键执行编辑命令(移动、删除、复制等)
  • 插入模式下,按键输入文本
  • 可视模式下,按键选择文本

这种设计的优势在于:

  1. 命令无需组合键:不需要按 Ctrl+Shift+X 这样的复杂组合,单个按键就能执行命令
  2. 手指不离主键区:所有常用命令都在字母键区,无需移动手去够方向键或鼠标
  3. 命令可组合:普通模式的命令可以组合使用,形成强大的编辑能力

四种基本模式

1. 普通模式(Normal Mode)

普通模式是 Vim 的默认模式,也是最常用的模式。在这个模式下:

  • 所有按键都是命令
  • 可以移动光标、删除文本、复制粘贴
  • 可以进入其他模式

进入普通模式:按 Esc 键或 Ctrl+[

普通模式下的常用操作

移动光标:
h - 左移 j - 下移 k - 上移 l - 右移

编辑操作:
x - 删除光标处字符
dd - 删除整行
yy - 复制整行
p - 粘贴

进入其他模式:
i - 进入插入模式(光标前)
a - 进入插入模式(光标后)
v - 进入可视模式
: - 进入命令行模式

2. 插入模式(Insert Mode)

插入模式用于输入文本,与普通编辑器的行为一致。

进入插入模式的方式

按键作用说明
i在光标前插入insert
a在光标后插入append
I在行首插入大写 I
A在行尾插入大写 A
o在下方新建一行open line below
O在上方新建一行大写 O

示例

假设当前行内容为 Hello World,光标在 W 上:

按 i 输入 "My "  →  Hello My World
按 a 输入 "!" → Hello World!
按 I 输入 "# " → # Hello World
按 A 输入 "!!!" → Hello World!!!
按 o 输入 "Line2" → Hello World
Line2

退出插入模式:按 EscCtrl+[

提示

Ctrl+[Esc 更容易按,且手指不需要离开主键区。建议养成使用 Ctrl+[ 的习惯。

3. 可视模式(Visual Mode)

可视模式用于选择文本,类似于其他编辑器中按住鼠标拖动选择。

进入可视模式

按键作用
v字符可视模式
V行可视模式
Ctrl+v块可视模式

三种可视模式的区别

字符可视模式(v

  • 按字符选择文本
  • 适合选择部分单词或句子

行可视模式(V

  • 按行选择文本
  • 适合选择整行或多行

块可视模式(Ctrl+v

  • 按矩形区域选择文本
  • 适合操作列数据

示例

原始文本:
apple 100
banana 200
cherry 300

使用 Ctrl+v 选择数字列,然后 I 输入 "$",Esc:
apple $100
banana $200
cherry $300

退出可视模式:按 EscCtrl+[

4. 命令行模式(Command-line Mode)

命令行模式用于执行 Ex 命令、搜索、过滤等操作。

进入命令行模式

按键作用
:执行 Ex 命令
/向前搜索
?向后搜索
!执行外部命令

常用 Ex 命令

:w          " 保存文件
:q " 退出
:wq " 保存并退出
:q! " 强制退出
:x " 保存并退出(同 :wq)

:e filename " 打开文件
:sav filename " 另存为

:set number " 显示行号
:set nonumber " 隐藏行号

:help " 查看帮助

退出命令行模式

  • Enter 执行命令
  • EscCtrl+c 取消

模式切换图

                    +------------------+
| 普通模式 |
| (Normal) |
| 默认模式 |
+--------+---------+
|
+-------------------+-------------------+
| | |
v v v
+----------------+ +----------------+ +----------------+
| 插入模式 | | 可视模式 | | 命令行模式 |
| (Insert) | | (Visual) | | (Command) |
| 输入文本 | | 选择文本 | | 执行命令 |
+----------------+ +----------------+ +----------------+

切换规则

  • 任何模式都可以按 Esc 回到普通模式
  • 只有普通模式能直接进入其他模式
  • 插入模式和可视模式不能直接切换,必须经过普通模式

其他模式

替换模式(Replace Mode)

替换模式类似于键盘上的 Insert 键,输入的字符会覆盖原有内容。

进入替换模式

  • R - 进入替换模式(持续替换)
  • r - 替换单个字符(替换一次后自动回到普通模式)

示例

原始文本:Hello World
光标在 W 上

按 R 输入 "Vim" → Hello Vimld
按 r 输入 "X" → Hello Xorld

退出替换模式:按 Esc

选择模式(Select Mode)

选择模式类似于 Windows 下的选择行为:输入任何可打印字符会直接替换选中的文本。

进入选择模式

  • 在可视模式下按 Ctrl+g 切换
  • 或使用 ghgHgCtrl+h

选择模式较少使用,通常可视模式已经足够。

模式指示器

Vim 在窗口底部显示当前模式:

显示模式
-- INSERT --插入模式
-- REPLACE --替换模式
-- VISUAL --可视模式
-- VISUAL LINE --行可视模式
-- VISUAL BLOCK --块可视模式
-- SELECT --选择模式
无显示普通模式
提示

如果你配置了 set noshowmode,模式指示器将不会显示。建议保持开启,特别是在学习阶段。

模式切换练习

让我们通过练习熟悉模式切换:

练习 1:基础切换

1. 启动 Vim:vim test.txt
2. 按 i 进入插入模式,输入 "Hello"
3. 按 Esc 回到普通模式
4. 按 : 进入命令行模式,输入 w(保存),回车
5. 按 : 进入命令行模式,输入 q(退出),回车

练习 2:综合运用

1. 打开 Vim:vim practice.txt
2. 按 i 输入以下文本:
Line 1
Line 2
Line 3
3. 按 Esc,然后按 gg 跳到第一行
4. 按 V 进入行可视模式,选中第一行
5. 按 y 复制该行
6. 按 G 跳到最后一行
7. 按 p 粘贴
8. 按 :wq 保存退出

练习 3:块操作

1. 创建文件:vim columns.txt
2. 输入:
apple 100
banana 200
cherry 300
3. 按 Ctrl+v 进入块可视模式
4. 使用 j 选择三行,使用 l 选择数字部分
5. 按 I 进入插入模式,输入 "$"
6. 按 Esc 退出(注意:需要等待一下才能看到效果)
7. 结果:
apple $100
banana $200
cherry $300

常见错误

1. 忘记当前模式

问题:在插入模式下按了很多命令键,结果输入了一堆字符。

解决:如果不确定当前模式,按 Esc 回到普通模式。按多次 Esc 不会出错。

2. 大小写混淆

问题iIaAoO 功能不同。

记忆技巧

  • 小写:与光标位置相关(i=光标前,a=光标后,o=下方)
  • 大写:与行相关(I=行首,A=行尾,O=上方)

3. 命令行模式忘记回车

问题:输入了 :wq 但没有按回车。

解决:命令行模式的命令需要按回车执行。如果输错了,按 Esc 取消。

模式使用建议

1. 养成频繁回到普通模式的习惯

在 Vim 中,普通模式是"家"。完成输入后,立即回到普通模式准备下一次操作。不要长时间停留在插入模式。

2. 使用合适的插入命令

根据需要选择合适的插入命令:

  • 想在当前位置插入 → 用 i
  • 想在行尾添加 → 用 A(比 $i 更快)
  • 想在下一行写代码 → 用 o

3. 利用可视模式预览选择

不确定会选中什么?先进入可视模式,用移动命令选择,确认后再执行操作。

4. 掌握模式切换的快捷键

操作推荐按键
回到普通模式Ctrl+[
保存:w
退出:q
保存退出ZZ

下一步

理解了模式的概念后,下一章我们将学习 Vim 的光标移动命令,这是高效编辑的基础。