sublime的vim模式有三条互斥路径:原生vi_mode(st4内建,功能极简)、已停更的vintage、当前唯一完整兼容vim的vintageous;确认方式看状态栏标识及配置文件关键词;esc失效多因中文输入法,应切英文键盘并用ctrl+[;dd/yy/ciw等需vintageous支持;汉化环境下仅vintageous可设启动即normal模式。

Sublime 的 Vim 模式不是“装个插件就 Vim”,而是三条互斥路径:原生 vi_mode(ST4 内建)、内置 Vintage(已停止维护)、第三方 Vintageous(当前唯一完整兼容 Vim 的方案)。汉化环境会放大输入法冲突、快捷键劫持、状态栏不可见等问题,直接导致 Esc、i、dd 失效——这不是配置错了,是通路被堵了。
怎么确认自己用的是哪个 Vim 模式
别猜,看状态栏右下角有没有 NORMAL/INSERT 标识。没有?说明根本没启用任何 Vim 模式。有?再往下查:
- 打开
Preferences → Settings – User,搜"vi_mode": true→ 是 ST4 原生模式(轻量但功能极简) - 搜
"ignored_packages",若含"Vintage"→ 旧版 Vintage 被禁用;若已移除且重启过 → 当前跑的是 Vintage - 搜
vintageous_开头的配置项(如vintageous_use_sys_clipboard)→ 已安装 Vintageous,它会自动把"Vintage"加回ignored_packages
Esc 按了没反应?先排查输入法和弹窗
在中文输入法(尤其是 macOS)下,Esc、i、a 全部失效——Vim 模式只响应英文键盘布局。这不是 Bug,是设计行为。
-
Ctrl+[一定可用,比Esc更可靠(远程桌面、输入法、全局快捷键很少拦截它) - 自动补全弹窗(Auto Complete)会吃掉
Esc:在用户设置加"pressing_esc_disables_auto_complete_window": true - 别急着在
Key Bindings – User里加jj映射——基础通路不通,映射本身也触发不了
dd / yy / ciw 不生效?原生模式根本不支持操作符待命
vi_mode 和 Vintage 都不实现 Vim 的 operator-pending 机制。这意味着 d 按下去后不会等待第二个动词(如 w、i、"),dd 和 yy 也不是内置命令。
-
vi_mode:只预置h/j/k/l、i/a/Esc、:w、:q!;dd需手动绑定 macro 文件,ciw完全无法补全 -
Vintage:支持dd/yy/p//,但不支持ciw、gq、可视块选择(Ctrl+v)、寄存器("ayy)、:set类命令 -
Vintageous:默认支持全部,包括ciw、.(repeat)、"0p、:s/old/new/g、:e filename
汉化环境下想开文件就进 NORMAL 模式?只能靠 Vintageous
原生 vi_mode 和 Vintage 都强制默认插入模式,且无配置项可改。这是硬限制,不是 bug。
- 安装 Vintageous 后,在
Preferences → Package Settings → Vintageous → Settings – User中写入:{"vintageous_start_in_command_mode": true} - 同时确保原生 Vintage 被禁用:在
Settings – User中把"Vintage"加回"ignored_packages"数组 - 拼写必须严格:是
vintageous_start_in_command_mode,不是vintage_start_in_command_mode,错一个字母就失效
最常被忽略的是配置项归属位置:所有 vintageous_* 开头的设置,必须写在 Vintageous 专属设置文件里(而非通用 Settings – User),且需重启生效。汉化环境下的输入法切换、状态栏字体缩放、快捷键覆盖,会让这个环节更脆弱——建议先切英文键盘、关掉所有输入法辅助工具,再验证基础通路。











