sublime text 启用 vim 模式需启用内置 vintage 插件:删除 settings – user 中 "ignored_packages": ["vintage"] 这行或清空为 [],重启后 esc 退出插入模式、vi/ci" 等命令生效;避免安装 neovintageous 等第三方插件引发冲突。

怎么让 Sublime Text 启用 Vim 模式
Sublime Text 默认不带 Vim 键绑定,得手动开启 Vintage 插件——它不是第三方插件,而是内置但默认禁用的模式支持包。
常见错误是去搜“安装 vim 插件”,结果装了 NeoVintageous 或 Vintageous,反而和原生 Vintage 冲突,导致 Esc 失效、i 进不去插入模式。
- 打开
Preferences → Settings – Default,别改这个文件;要改的是Settings – User - 在
Settings – User里加一行:"ignored_packages": ["Vintage"]→ 删掉这行,或把它清空成[] - 重启 Sublime,
Esc就能退出插入模式了,vi、ci"等基本命令也生效
为什么按 i 没反应,或 Esc 退不出编辑状态
根本原因是 Vintage 插件被禁用了,或者被其他插件覆盖了按键映射。尤其装过 Package Control 里搜“vim”的插件后,很容易出现双模式打架。
检查方式很直接:按下 Ctrl+` 打开控制台,输入 sublime.active_window().active_view().settings().get('command_mode'),返回 True 才算真进命令模式。
- 确认
ignored_packages没把Vintage列进去(大小写敏感) - 删掉
~/.config/sublime-text-3/Packages/User/Vintage.sublime-settings(Linux/macOS)或对应 Windows 路径下的自定义配置,避免旧规则干扰 - 如果用了
Ctrl+Shift+P命令面板,输Vintage: Toggle Mode可临时开关,适合调试
ci"、dat 这类文本对象操作不生效怎么办
Vintage 只实现了 Vim 的子集,不支持所有文本对象(text objects),比如 it(inner tag)、ip(inner paragraph)默认不可用,ci" 却可以——因为引号是基础支持项,而 HTML 标签需要额外映射。
性能上没影响,但兼容性差:这些操作依赖 Vintage 的内部 parser,无法像 Neovim 那样扩展;强行加规则容易导致光标跳错或卡死。
- 想用
ci"、ci)、di[,不用额外配置,它们原生支持 - 想用
vit(visual inner tag),得手动加 key binding:在Key Bindings – User里加一条{"keys": ["v", "i", "t"], "command": "expand_selection", "args": {"to": "tag"}} - 别试图绑定
gq(格式化段落)——Vintage没对应 command,绑了也没反应
怎样保留部分 Sublime 快捷键(比如 Ctrl+P)又不冲突
Vim 模式会劫持几乎所有按键,但 Ctrl 和 Alt 组合键默认放行,所以 Ctrl+P、Ctrl+Shift+P、Ctrl+Tab 都能照常工作。真正容易踩坑的是 Esc 和方向键。
方向键在命令模式下移动光标很慢,且不能触发 hl 那种响应速度;而 hjkl 是原生走的底层光标逻辑,更稳。
- 不要重绑定
Esc为别的键(比如jk),Vintage不支持这种“退出序列” - 如果常用
Ctrl+Shift+↑/↓移动整行,确保它没被Vintage的ctrl+shift+up规则覆盖(检查Key Bindings – Default里是否有冲突项) - 想让
Backspace在命令模式下退格(而非删除字符),加这条:{"keys": ["backspace"], "command": "move", "args": {"by": "characters", "forward": false, "extend": false}}
复杂点在于 Vintage 的 mode 切换是全局的,没法按文件类型开关;你一旦打开一个 Markdown 文件想用 ci* 改强调,就得接受整个窗口都走 Vim 流程。这点容易被忽略,直到你在 JSON 文件里误按 dd 删了一整行才反应过来。










