Vim 有哪几种模式?怎么切换?
打开 Vim 第一件事:搞懂模式
第一次用 Vim 的人几乎都会遇到同一个问题:明明在敲键盘,屏幕上怎么什么都没出现?原因很简单——Vim 不是你用过的那种编辑器,它有模式。在错误的模式下按键,Vim 不会乖乖输入文字,而是执行命令。这个设计乍看反直觉,但一旦习惯,编辑效率会远超普通编辑器。
Vim 的核心思路是:不同的任务用不同的模式。浏览代码、输入文字、选择区域、执行命令——各有专属模式,按键含义随模式切换而改变。下面逐个说清楚。
普通模式(Normal Mode)
普通模式是 Vim 的默认状态。打开文件后你就处在这个模式里,从任何其他模式按 Esc 也能回到这里。
在普通模式下,键盘上的每个键都是一个命令,而不是要输入的字符:
hjkl— 左、下、上、右移动光标x— 删除光标下的字符dd— 删除整行yy— 复制整行p— 粘贴u— 撤销.— 重复上一次操作
普通模式是你待得最久的地方。Vim 的哲学是"浏览多于输入",大部分时间你其实在阅读和导航,偶尔才需要打字。所以普通模式被设为默认,而不是插入模式。
进入方式:启动 Vim 自动进入;任意模式按 Esc 或 Ctrl+[ 返回。
插入模式(Insert Mode)
这才是"像正常编辑器"的模式——你按什么键,屏幕上就出现什么字符。Vim 窗口左下角会显示 -- INSERT -- 提示你当前在插入模式。
进入插入模式有好几种方式,区别在于光标落点:
| 按键 | 效果 |
|---|---|
i | 在光标前插入 |
a | 在光标后插入 |
I | 在行首(第一个非空字符前)插入 |
A | 在行尾插入 |
o | 在当前行下方新开一行并插入 |
O | 在当前行上方新开一行并插入 |
s | 删除光标下字符并进入插入 |
实际使用中,i、a、o、A 四个用得最多。A 特别好用——想在行尾追加内容,一个键到位,不用先移光标再按 i。
退出方式:按 Esc 或 Ctrl+[ 回到普通模式。
可视模式(Visual Mode)
可视模式用来选择文本,相当于用鼠标拖选,但效率更高。进入后左下角显示 -- VISUAL --。
三种可视模式各有用途:
v— 字符可视模式,逐字符选择,适合选中几个词V— 行可视模式,整行整行地选,适合操作连续多行Ctrl+v— 块可视模式,矩形选择,批量缩进、批量加注释时非常好用
选中之后可以紧跟操作:d 删除、y 复制、> 缩进、< 反缩进、: 对选中区域执行命令。
块可视模式有一个经典用法:批量注释。Ctrl+v 选中多行行首,按 I 输入 // 或 #,再按 Esc,选中的行会同时加上注释符号。
退出方式:按 Esc,或再按一次 v/V/Ctrl+v。
命令行模式(Command-Line Mode)
在普通模式下按 :(冒号)进入命令行模式,光标跳到屏幕最底部,等待你输入命令。这个模式用于执行保存、退出、替换、设置选项等操作。
常用命令:
:w— 保存:q— 退出:wq或:x— 保存并退出:q!— 强制退出不保存:%s/old/new/g— 全文替换:set number— 显示行号:!ls— 执行外部 shell 命令(这里是查看目录)
命令输入完按回车执行,执行后自动回到普通模式。如果不想执行,按 Esc 取消。
除了 :,按 / 进入搜索也是一种命令行模式,输入关键词后回车即可跳转匹配位置,按 n 跳到下一个,N 跳到上一个。
替换模式(Replace Mode)
替换模式不像前面四种那么常被提起,但在特定场景下很实用。进入后左下角显示 -- REPLACE --。
R— 进入替换模式,你输入的每个字符会覆盖光标位置的现有字符,就像很多编辑器里的 Insert 键切换到覆盖模式一样r— 单次替换,替换光标下的一个字符后自动回到普通模式
r 比 R 用得更频繁。比如把一个字母改掉,r 一个键搞定,不用先进插入模式再删再输。
还有一种虚拟替换模式 gR,区别在于 Tab 键的处理——R 会把 Tab 当作一个字符覆盖,gR 则保持 Tab 的对齐逻辑不变。日常用得不多,知道有这回事就行。
退出方式:按 Esc 回到普通模式。
模式切换一览
把上面的关系画出来就是:普通模式是枢纽,所有模式都通过 Esc 回到普通模式,再从普通模式进入其他模式。
shell普通模式 ←Esc← 插入模式 (i/a/o...) ↓↑ ↓Esc →→ : → 命令行模式 ↓↑ →→ v/V/Ctrl+v → 可视模式 ↓↑ →→ R → 替换模式
一个实用建议:如果你不确定当前在什么模式,连按两下 Esc,肯定回到普通模式。养成这个习惯,比记住所有快捷键都管用。
从模式思维开始
Vim 的模式系统不是负担,而是它高效的根本原因。普通模式让导航和编辑共用键盘,不用频繁碰鼠标;插入模式专注输入;可视模式批量操作;命令行模式处理全局事务;替换模式精确覆盖。搞清楚每种模式做什么、怎么进怎么出,剩下的就是肌肉记忆的事了。打开终端,输入 vimtutor,花三十分钟走一遍内置教程,比看十篇文章都管用。