Essay 012 · 工具
Vimium 与 Vim 按键迁移的四类边界
Vimium 能迁移方向感和模式意识,却不能替代 Vim 的操作符语法;用四类按键边界拆清哪些习惯能复用、哪些必须重学。
本次修订:拆分 Vim 移动按键说明,并补充 b 的向后移动语义
Version 1.3Vimium 可以迁移方向感、模式意识和少量导航习惯,但不能让人无缝迁移到 Vim。判断能否迁移的标准不是“按键长得一样”,而是同一个按键在两端触发的动作是否相近。
四类边界如何划分
只比较“两端各自定义了哪些按键”,只能分出三个区域:Vimium 独有、Vim 独有、两端共有。要回答“习惯能不能带过去”,还要看共有按键在两端触发的动作是否相近。按这个标准把交集再切一刀,三个区域就变成四类:
| 序号 | 类别 | 判定条件 | 学习意义 |
|---|---|---|---|
| 1 | Vimium 独有 | 只在 Vimium 中有定义 | 只当作浏览器命令记忆 |
| 2 | Vim 独有 | 只在 Vim 中有定义 | 进入编辑器后重新学习 |
| 3 | 同键同义或近义 | 两端都有,且动作相同或相近 | 肌肉记忆可以迁移 |
| 4 | 同键异义 | 两端都有,但动作不同 | 必须主动解除旧联想 |
第四类不是维恩图里凭空多出的区域,而是把交集按动作语义再分了一次。比较的单位仍然是按键,动作只是判断这个按键的习惯能否迁移的依据。
四类按键在本机如何分布
本机使用 Vimium 2.4.2 与 NvChad,且 Vimium 的 /
已被取消映射,当前有效的 Normal 模式映射共 67 个。按迁移价值划分:21
个同义或近义、40 个同键异义、6 个 Vimium 独有;Vim 独有项不计入这 67
个。
这里的“近义”允许操作对象不同。例如 j 在 Vimium
中向下滚动页面,在 Vim
中向下移动光标:动作不完全相同,但方向感可以迁移。若只承认严格同义,这
21 个还要继续缩减。
同义或近义:可以迁移的 21 个按键
| 序号 | 按键 | Vimium | Vim | 数量 |
|---|---|---|---|---|
| 1 | h j k l |
页面向左、下、上、右滚动 | 光标向左、下、上、右移动 | 4 |
| 2 | gg G |
到页面顶部、底部 | 到缓冲区首行、末行 | 2 |
| 3 | zH zL |
滚到页面最左、最右 | 水平滚动半屏 | 2 |
| 4 | Ctrl-E Ctrl-Y |
向下、向上滚动 | 屏幕向下、向上滚动一行 | 2 |
| 5 | i |
进入 Insert mode,让网页接收按键 | 在光标前进入插入模式 | 1 |
| 6 | v V |
进入字符、行级可视选择 | 进入字符、行级 Visual mode | 2 |
| 7 | n N |
下一个、上一个搜索结果 | 下一个、上一个搜索结果 | 2 |
| 8 | * # |
向前、向后查找选中文本 | 向前、向后查找光标下单词 | 2 |
| 9 | gt gT |
下一个、上一个浏览器标签页 | 下一个、上一个 Vim tab page | 2 |
| 10 | m + 字符、反引号 + 字符 |
创建标记、跳转到标记 | 创建标记、跳转到标记 | 2 |
这组按键可以放心复用,但要注意两端的操作对象不同:浏览器里是页面、链接和标签页,Vim 里是光标、文本对象和缓冲区。
同键异义:必须重学的 40 个冲突按键
同键异义最容易制造“我明明按对了”的错觉。下表覆盖本机当前 Vimium 映射中的全部 40 个冲突键。
| 序号 | 按键 | Vimium | Vim | 数量 |
|---|---|---|---|---|
| 1 | d u |
向下、向上滚动半页 | 删除操作符、撤销 | 2 |
| 2 | r R |
普通刷新、强制刷新 | 替换字符、进入 Replace mode | 2 |
| 3 | yy |
复制当前网址 | 复制当前行 | 1 |
| 4 | p P |
在当前、新标签页打开剪贴板网址 | 在光标后、前粘贴 | 2 |
| 5 | gi |
聚焦第一个输入框 | 回到上次插入位置并进入插入模式 | 1 |
| 6 | [[ ]] |
上一个、下一个页面链接 | 向后、向前移动到 section | 2 |
| 7 | gf gF |
切换 frame、回到主 frame | 打开光标下文件、并跳到指定行 | 2 |
| 8 | gu gU |
URL 上一级、站点根路径 | 小写、大写操作符 | 2 |
| 9 | f F |
显示链接提示并在当前、新标签页打开 | 向前、向后查找字符 | 2 |
| 10 | o O T b
B ge gE |
Vomnibar、标签选择、书签与网址编辑 | 新建行、反向 till-char、WORD 与词尾移动 | 7 |
| 11 | H L J K
^ |
浏览历史、切换标签页 | 屏幕行移动、合并行、关键字帮助、首个非空白字符 | 5 |
| 12 | << >> g0
g$ W |
移动标签页、首末标签页、新窗口 | 缩进、屏幕行首尾、按 WORD 前进 | 5 |
| 13 | t x X |
新建、关闭、恢复标签页 | till-char、删除当前字符、删除前一字符 | 3 |
| 14 | zi zo ? gs |
页面缩放、帮助、查看源码 | 折叠控制、反向搜索、休眠 | 4 |
最需要警惕的是 d/u:Vimium 用不带修饰键的
d、u 滚动半页;Vim 的半页移动是
Ctrl-D、Ctrl-U,裸 d
是删除操作符,裸 u 是撤销。少按一个
Control,动作就从导航变成编辑。
Vimium 独有:6 个完整命令
“独有”只表示 Vim 的默认 Normal mode 没有对应的完整命令;Vim 可以通过配置重新绑定任何键。
| 序号 | 按键 | Vimium 动作 | Vim 中的情况 |
|---|---|---|---|
| 1 | Option-F |
连续选择多个链接并排队打开 | 默认没有对应完整命令 |
| 2 | yf |
通过链接提示复制链接网址 | y 是操作符,仍会等待后续目标 |
| 3 | yt |
复制当前浏览器标签页 | y 是操作符,仍会等待后续目标 |
| 4 | Option-P |
固定或取消固定标签页 | 默认没有对应完整命令 |
| 5 | Option-M |
静音或取消静音标签页 | 默认没有对应完整命令 |
| 6 | z0 |
恢复页面缩放 | 默认没有对应完整命令 |
yf、yt 尤其值得单独记:在 Vimium
中两次按键就完成动作;在 Vim 中 y
只是操作符的开头,按下后还会等待后续目标,不会执行任何动作。
Vim 独有:一套组合语法
Vim 的核心优势不在孤立命令的数量,而在组合语法:操作符可以与移动、文本对象自由组合。
| 序号 | 语法家族 | 常见按键 | 含义 |
|---|---|---|---|
| 1 | 移动 | w |
向前移动到下一个单词的开头 |
| 2 | 移动 | b |
向后移动到上一个单词的开头 |
| 3 | 移动 | e |
向前移动到当前或下一个单词的结尾 |
| 4 | 移动 | 0 |
移动到当前行的行首 |
| 5 | 移动 | $ |
移动到当前行的行尾 |
| 6 | 移动 | % |
跳转到与当前位置配对的括号或符号 |
| 7 | 移动 | ( |
向后移动到上一句的开头 |
| 8 | 移动 | ) |
向前移动到下一句的开头 |
| 9 | 移动 | { |
向后移动到上一段的开头 |
| 10 | 移动 | } |
向前移动到下一段的开头 |
| 11 | 屏幕与跳转 | Ctrl-D/U Ctrl-F/B Ctrl-O/I
; , |
翻页、跳转列表、重复字符查找 |
| 12 | 编辑动作 | a A I c
s D ~ .
Ctrl-R |
插入、修改、删除、大小写与重复 |
| 13 | 操作符 × 移动 | dw cw d$ y$ |
删除、修改或复制到某个移动终点 |
| 14 | 操作符 × 文本对象 | diw ciw ci"
da( |
操作单词、引号或括号内部与周围 |
| 15 | 寄存器、宏与命令 | "ap qa…q @a :w
:%s |
指定寄存器、录制宏和执行 Ex 命令 |
这也是无法“无缝迁移”的根本原因:Vimium 本质上是一份浏览器命令清单,Vim 则是一门由操作符、移动、文本对象、次数和寄存器组合而成的编辑语言。
从映射表回到实际输入
映射表只说明按键对应什么命令,不保证按键能原样送达。浏览器中的输入链路是“macOS 物理按键 → Chrome → Vimium”,终端中则是“macOS 物理按键 → Ghostty → tmux → Neovim”。两端文档里显示的内部键名相同,不代表最终应用收到的按键序列相同。
当前环境中的实际按键
- Ghostty 把物理 Option 作为 Alt 发送;浏览器里的
Option-F到了终端只是Alt-F,不会自动变成任何 Vim 动作。 - tmux 的 prefix 是物理
Ctrl-Space,按下后下一键先由 tmux 的 key table 解释。 - 终端粘贴是物理
Command-V;Vim 进入块级 Visual mode 是物理Ctrl-V,两者不是同一个快捷键。 - Vimium 的半页滚动是物理
d/u;Vim 的半页移动是物理Ctrl-D/Ctrl-U。 - 当前 NvChad 还把
jk映射为退出 Insert mode、把;映射为:,所以上文的默认按键表只是起点,最终行为仍以实际配置为准。
此外,Vimium 在排除站点上完全不接管按键。本机的 Gmail 与哔哩哔哩就在排除列表中,在这两个站点上练不到任何 Vimium 肌肉记忆。
按风险安排学习顺序
- 先稳定
h/j/k/l、gg/G、n/N与标记,复用方向感、搜索和跳转习惯。 - 把
d/u、f/F、p/P、x/X、r/R、o/O当作冲突清单,进入 Vim 后主动切换语义。 - 直接学习 Vim 的“操作符 × 移动/文本对象”,从
dw、d$、ciw、ci"开始;这部分在 Vimium 里没有对应经验,不必等迁移。 - 遇到修饰键时沿物理按键、Ghostty、tmux、Neovim 逐层核对,尤其区分 Command、Control 与 Option。
Vimium 是很好的键盘导航入门,但不是 Vim 模拟器。它能提前训练“不碰鼠标”和“先发命令再看结果”的习惯;真正进入 Vim 后,要保留可迁移的导航骨架,清空冲突键的旧联想,再从头学习组合语法。
参考资料
查看本文修订记录(4)
- v1.3 · 2026.09.02 拆分 Vim 移动按键说明,补充 b 的向后移动语义。
- v1.2 · 2026.08.31 改写全文措辞,提升可读性。
- v1.1 · 2026.08.31 重组章节层级,收拢按键分类与练习路径。
- v1.0 · 2026.08.31 首次发布。