Vim 模式详解

深入理解 Vim 的各种模式,掌握模式切换技巧

📋 模式概述

Vim 的核心特性是模式编辑,不同的模式有不同的功能:

模式用途进入方式退出方式
普通模式导航、命令执行默认模式-
插入模式输入文本iaoEsc
可视模式选择文本vVCtrl+vEsc
命令模式执行命令:EnterEsc
替换模式替换文本REsc

🎯 普通模式(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:返回普通模式
  • 执行操作后自动退出(如 dy 等)

💬 命令模式(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 --
  • 命令模式:底部显示 :

常见错误

  1. 在普通模式下尝试输入文本

    • 症状:按字母没反应或执行了命令
    • 解决:按 i 进入插入模式
  2. 在插入模式下尝试执行命令

    • 症状:输入的命令被当作文本
    • 解决:先按 Esc 返回普通模式
  3. 不知道当前在什么模式

    • 解决:看底部状态栏,或按 Esc 多次确保在普通模式

💡 模式使用最佳实践

1. 尽量在普通模式

  • Vim 的强大在于普通模式
  • 只在需要输入文本时才进入插入模式
  • 输入完成后立即返回普通模式

2. 使用组合命令

" 不好的方式
i              " 进入插入模式
输入内容
Esc            " 返回普通模式
dd             " 删除行
 
" 好的方式
dd             " 直接删除行(在普通模式)

3. 利用操作符+动作

" 删除到行尾
d$             " 而不是进入插入模式手动删除
 
" 修改单词
cw             " 删除单词并进入插入模式

4. 可视模式用于复杂选择

" 选择跨多行的内容
V              " 行可视模式
jj             " 选择3行
y              " 复制

🎯 模式记忆技巧

模式切换口诀

普通模式是家,其他模式是外出
i 进入插入,Esc 回家
v 选择文本,: 执行命令

模式判断

  • 能输入文本 → 插入模式或替换模式
  • 能移动光标但输入是命令 → 普通模式
  • 能选择文本 → 可视模式
  • 底部有冒号 → 命令模式

📚 总结

模式主要用途关键命令
普通模式导航、命令执行默认模式,Esc 返回
插入模式输入文本iao
可视模式选择文本vVCtrl+v
命令模式执行命令:
替换模式替换文本R

核心原则

  1. 大部分时间在普通模式
  2. 需要输入时才进入插入模式
  3. 输入完立即返回普通模式
  4. 不确定模式时,按 Esc 多次

相关文档