Sublime Text 4 原生 vi_mode 仅支持基础模式切换与导航,不兼容 Vim 操作符逻辑(如 dd、ciw)和 Ex 命令;需用 Vintageous 实现完整 Vim 兼容。

Sublime Text 4 原生 vi_mode 已足够轻量可靠,但默认不启用、不兼容 Vim 的操作符逻辑(如 dd、ciw),也不支持 Ex 命令解析;若你追求“开箱即用的 Vim 感”,必须用 Vintageous —— 它不是增强包,而是重写的 Vim 兼容层。
怎么确认 vi_mode 是否真生效
原生 vi_mode 必须重启 Sublime 才加载,热保存设置无效。生效后状态栏右下角会显示 NORMAL 或 INSERT。验证方法:
- 打开任意文件,按
Esc→ 状态栏应立刻变为NORMAL - 再按
i→ 应变为INSERT,且光标变粗/有插入提示 - 若无反应,优先检查 macOS 是否处于中文输入法(Vim 模式只响应英文键盘布局)
- Windows/Linux 用户需排查全局快捷键(如录屏工具占用
Esc)或 Sublime 自定义键绑定是否覆盖了{"keys": ["i"], "command": "enter_insert_mode"}
为什么 dd / yy / ciw 不工作
Sublime 原生 vi_mode 仅实现模式切换与基础导航,不包含操作符待命(operator-pending)机制。这意味着 d 后不会等待第二个动词(如 w、i、"),dd 和 yy 也非内置命令,需手动绑定宏文件:
-
dd需在Preferences → Key Bindings – User中添加:[{"keys": ["d", "d"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"}}] -
yy同理,指向Copy Line.sublime-macro -
ciw、dat、gq等完全无法通过宏补全,因为它们依赖文本对象识别与上下文解析 —— 这是Vintageous的核心能力,原生层不提供
如何让新文件默认进入 NORMAL 模式
原生 vi_mode 强制默认插入模式,且无配置项可改。这是设计限制,不是 bug。想跳过每次按 Esc 的步骤,唯一可行路径是换用 Vintageous:
- 通过
Package Control: Install Package安装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),错一个字母就失效
粘贴代码时缩进错乱怎么办
原生 vi_mode 支持 :set paste,但仅限于 Vintage 模式(非 vi_mode)。而 Vintageous 兼容该命令,且更稳定:
- 命令模式下输入
:set paste→ 回车 → 再按i进入插入模式 → 粘贴 →Esc→:set nopaste - 若用系统剪贴板(如从终端复制),建议在
Vintageous设置中加:{"vintageous_use_sys_clipboard": true},使y/p直接对接系统缓冲区 - 别依赖
:set number显示行号 —— Sublime 原生不支持该 Ex 命令,正确路径是View → Line Numbers
真正卡住多数人的,从来不是“怎么开启”,而是混淆了 vi_mode(轻量模式切换)、Vintage(已停止维护的按键映射层)和 Vintageous(完整 Vim 兼容层)三者的边界。选错层级,后面所有自定义键绑定、macro 补丁、.vimrc 尝试,都是在修一堵本不该存在的墙。











