Vim 模式详解
深入理解 Vim 的各种模式,掌握模式切换技巧
📋 模式概述
Vim 的核心特性是模式编辑,不同的模式有不同的功能:
| 模式 | 用途 | 进入方式 | 退出方式 |
|---|---|---|---|
| 普通模式 | 导航、命令执行 | 默认模式 | - |
| 插入模式 | 输入文本 | i、a、o 等 | Esc |
| 可视模式 | 选择文本 | v、V、Ctrl+v | Esc |
| 命令模式 | 执行命令 | : | Enter 或 Esc |
| 替换模式 | 替换文本 | R | Esc |
🎯 普通模式(Normal Mode)
特点
- 默认模式:打开 Vim 时就是普通模式
- 命令模式:所有编辑命令都在此模式下执行
- 导航模式:用于移动光标和定位
进入方式
- 打开 Vim 时自动进入
- 从其他模式按
Esc返回 - 在插入模式下按
Ctrl+[(等同于Esc)
常用操作
" 移动
h j k l " 基本移动
w b e " 单词移动
0 $ " 行首行尾
gg G " 文件首尾
" 编辑
dd " 删除行
yy " 复制行
p " 粘贴
u " 撤销
" 组合
d3w " 删除3个单词
y5j " 向下复制5行技巧
- 数字前缀:
5dd删除 5 行,3w向前移动 3 个单词 - 重复操作:
.重复上次操作 - 操作符+动作:
d(删除)+w(单词)=dw(删除单词)
✏️ 插入模式(Insert Mode)
特点
- 文本输入:用于输入和编辑文本内容
- 类似普通编辑器:可以像普通编辑器一样输入
- 但功能有限:不能执行 Vim 命令
进入方式
| 命令 | 说明 | 光标位置 |
|---|---|---|
i | 在光标前插入 | 光标前 |
a | 在光标后插入 | 光标后 |
o | 在下一行插入 | 新行 |
O | 在上一行插入 | 新行 |
I | 在行首插入 | 行首(非空白) |
A | 在行尾插入 | 行尾 |
s | 删除字符并插入 | 当前字符 |
S | 删除整行并插入 | 当前行 |
c + 动作 | 删除并插入 | 根据动作 |
退出方式
Esc:返回普通模式Ctrl+[:等同于Esc
插入模式下的快捷键
| 快捷键 | 说明 |
|---|---|
Ctrl+h | 删除前一个字符(类似退格) |
Ctrl+w | 删除前一个单词 |
Ctrl+u | 删除到行首 |
Ctrl+o | 临时进入普通模式(执行一个命令后返回) |
使用场景
" 场景1:在单词中间插入
" 光标在 "hel|lo" 的 l 处
i " 在 l 前插入,输入 "x" → "helxlo"
a " 在 l 后插入,输入 "x" → "hellxo"
" 场景2:在行尾添加内容
A " 直接到行尾并进入插入模式
" 场景3:替换整行
S " 删除整行并进入插入模式
" 场景4:修改单词
cw " 删除单词并进入插入模式
ci" " 删除引号内容并进入插入模式👁️ 可视模式(Visual Mode)
特点
- 文本选择:类似其他编辑器的拖选功能
- 三种类型:字符、行、块
- 选择后操作:选择后可以删除、复制、替换等
三种可视模式
1. 字符可视模式(Character-wise Visual)
| 命令 | 说明 |
|---|---|
v | 进入字符可视模式 |
| 移动命令 | 扩展选择范围 |
d | 删除选中内容 |
y | 复制选中内容 |
c | 删除并进入插入模式 |
示例:
" 选择 "hello" 中的 "ell"
v " 进入可视模式
lll " 向右扩展3个字符
d " 删除选中内容 → "ho"2. 行可视模式(Line-wise Visual)
| 命令 | 说明 |
|---|---|
V | 进入行可视模式 |
j/k | 上下扩展选择 |
d | 删除选中行 |
y | 复制选中行 |
> | 向右缩进 |
< | 向左缩进 |
示例:
" 选择3行并删除
V " 进入行可视模式
jj " 向下扩展2行(共3行)
d " 删除选中的3行3. 块可视模式(Block Visual)
| 命令 | 说明 |
|---|---|
Ctrl+v | 进入块可视模式 |
| 移动命令 | 扩展选择块 |
I | 在块前插入 |
A | 在块后插入 |
d | 删除块内容 |
c | 删除块并插入 |
示例:
" 在每行开头添加注释
Ctrl+v " 进入块可视模式
jjj " 向下选择4行
I " 在块前插入
# " 输入 #
Esc " 退出,所有行都添加了 #退出方式
Esc:返回普通模式- 执行操作后自动退出(如
d、y等)
💬 命令模式(Command Mode)
特点
- 执行命令:文件操作、设置、搜索替换等
- 底部输入:命令在底部状态栏显示
- 历史记录:可以使用上下箭头浏览历史命令
进入方式
::从普通模式进入- 自动进入:某些操作会自动进入(如搜索
/)
常用命令
文件操作
:w " 保存
:q " 退出
:wq " 保存并退出
:x " 保存并退出(等同于 :wq)
:q! " 强制退出(不保存)
:w filename " 另存为
:e filename " 打开文件跳转
:10 " 跳转到第10行
:$ " 跳转到最后一行搜索替换
:s/old/new " 替换当前行第一个
:s/old/new/g " 替换当前行所有
:%s/old/new/g " 替换全文所有
:%s/old/new/gc " 替换全文(确认)
:5,10s/old/new/g " 替换5-10行设置
:set number " 显示行号
:set nonumber " 隐藏行号
:set relativenumber " 显示相对行号
:set hlsearch " 高亮搜索
:nohlsearch " 取消高亮退出方式
Enter:执行命令后自动返回普通模式Esc:取消命令,返回普通模式Ctrl+c:取消命令(某些情况下)
🔄 替换模式(Replace Mode)
特点
- 覆盖输入:输入的字符会替换原有字符
- 类似覆盖模式:类似其他编辑器的覆盖/改写模式
进入方式
| 命令 | 说明 |
|---|---|
R | 进入替换模式 |
r | 替换单个字符(不进入替换模式) |
退出方式
Esc:返回普通模式
使用场景
" 场景:修改 "hello world" 为 "hi there"
" 光标在 h
R " 进入替换模式
hi there " 输入新内容,直接覆盖
Esc " 退出与 r 的区别
r:只替换一个字符,然后自动返回普通模式R:进入替换模式,可以连续替换多个字符
🎨 模式切换技巧
快速切换
" 从插入模式快速返回普通模式
Esc " 标准方式
Ctrl+[ " 替代方式(手不用离开主键盘区)
Ctrl+c " 不推荐(可能中断某些操作)
" 临时执行普通模式命令
Ctrl+o " 在插入模式下,临时进入普通模式执行一个命令模式指示
- 普通模式:无特殊指示
- 插入模式:底部显示
-- INSERT -- - 可视模式:底部显示
-- VISUAL --、-- VISUAL LINE --、-- VISUAL BLOCK -- - 替换模式:底部显示
-- REPLACE -- - 命令模式:底部显示
:
常见错误
-
在普通模式下尝试输入文本
- 症状:按字母没反应或执行了命令
- 解决:按
i进入插入模式
-
在插入模式下尝试执行命令
- 症状:输入的命令被当作文本
- 解决:先按
Esc返回普通模式
-
不知道当前在什么模式
- 解决:看底部状态栏,或按
Esc多次确保在普通模式
- 解决:看底部状态栏,或按
💡 模式使用最佳实践
1. 尽量在普通模式
- Vim 的强大在于普通模式
- 只在需要输入文本时才进入插入模式
- 输入完成后立即返回普通模式
2. 使用组合命令
" 不好的方式
i " 进入插入模式
输入内容
Esc " 返回普通模式
dd " 删除行
" 好的方式
dd " 直接删除行(在普通模式)3. 利用操作符+动作
" 删除到行尾
d$ " 而不是进入插入模式手动删除
" 修改单词
cw " 删除单词并进入插入模式4. 可视模式用于复杂选择
" 选择跨多行的内容
V " 行可视模式
jj " 选择3行
y " 复制🎯 模式记忆技巧
模式切换口诀
普通模式是家,其他模式是外出
i 进入插入,Esc 回家
v 选择文本,: 执行命令
模式判断
- 能输入文本 → 插入模式或替换模式
- 能移动光标但输入是命令 → 普通模式
- 能选择文本 → 可视模式
- 底部有冒号 → 命令模式
📚 总结
| 模式 | 主要用途 | 关键命令 |
|---|---|---|
| 普通模式 | 导航、命令执行 | 默认模式,Esc 返回 |
| 插入模式 | 输入文本 | i、a、o |
| 可视模式 | 选择文本 | v、V、Ctrl+v |
| 命令模式 | 执行命令 | : |
| 替换模式 | 替换文本 | R |
核心原则:
- 大部分时间在普通模式
- 需要输入时才进入插入模式
- 输入完立即返回普通模式
- 不确定模式时,按
Esc多次
相关文档: