sublime text快捷键失效90%因按键未进入编辑器或被插件覆盖,须先用sublime.log_input(true)验证输入是否被捕获,再检查系统/输入法占用及插件劫持,而非直接修改user.sublime-keymap。

Sublime Text 里所谓“快速通道”快捷键(比如 Ctrl+Shift+P、Ctrl+P、Ctrl+R)失效,90% 不是配置错了,而是压根没进编辑器,或被后加载的插件静默覆盖——改 User.sublime-keymap 前不验证这两点,等于在黑盒里调参。
按键根本没进 Sublime?先跑 sublime.log_input(True)
按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按你想查的快捷键(比如 Ctrl+Shift+P)。如果控制台完全没输出,说明信号被系统/输入法/显卡工具截断了:
- Windows 用户重点关掉:NVIDIA 控制面板 → 热键、Intel Graphics Command Center → 快捷键、搜狗/QQ 拼音的
Ctrl+Shift切换 - macOS 用户去「系统设置 → 键盘 → 快捷键」里检查:
Cmd+Space(Spotlight)、Cmd+Shift+P(Spotlight 或输入源)、是否勾选「使用 F1、F2 等键作为标准功能键」(影响Esc) - 临时切英文输入法再试一次,是最简单有效的隔离手段
Ctrl+Shift+P 进了 Sublime 但唤不出命令面板?查加载顺序和插件劫持
如果 sublime.log_input(True) 有输出(如 key evt: ctrl+shift+p),但面板不弹,说明绑定被覆盖。Sublime 加载顺序是:Default → 插件自带的 Default.sublime-keymap → User.sublime-keymap,后加载者无条件覆盖前一个:
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(Default)搜
"ctrl+shift+p",确认它原本对应show_overlay且args是{"overlay":"command_palette"} - 在右侧(User)和所有插件目录(
Packages/Vintage/、Packages/Emmet/等)中全局搜索同一"keys"字段 - 高危插件优先禁用:
Vintage(常劫持Ctrl+[和Esc)、Origami(劫持Esc)、SideBarEnhancements(可能覆盖Ctrl+K类组合)
跨平台写法错一个字就全废:super 不是 ctrl,alt 可直用
想让 Ctrl+Shift+P 在 Windows/Linux/macOS 都生效,不能写死 ctrl——macOS 上它对应的是 Control 键(极少用于主操作),真正等效于 Windows 的 Ctrl 和 macOS 的 Cmd 的是 super:
- 错误写法(macOS 失效):
{"keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"}} - 正确写法(三端自动映射):
{"keys": ["super+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"}} -
alt在三端语义一致(macOS Option / Windows Alt),可直接用;ctrl在 macOS 上仅作修饰键,不要拿它当主操作键 - 必须用英文双引号、数组末尾不能多逗号、不支持
//注释——JSON 格式错一字符,整条配置静默失效
Esc 和 Cmd+B 这类键根本不在 keymap 管辖范围内
Esc 关闭搜索框、命令面板、替换栏,是 Sublime 内核硬编码行为,不走任何 .sublime-keymap 流程。你在 User.sublime-keymap 里加 {"keys": ["escape"], "command": "hide_panel"} 不仅无效,还会破坏原生逻辑:
-
Esc失效?先运行subl --safe-mode:若恢复,说明是插件劫持(Vintage默认用Esc退出插入模式,需设"exit_insert_mode_on_escape": false;Origami要关close_on_escape) -
Cmd+B在 macOS 上常被 Finder 或 Dock 占用:去「系统设置 → 键盘 → 快捷键 → 应用快捷键」里搜索Cmd+B,删掉 Finder/Dock 的条目即可 - 这类键位问题,永远优先排查系统级占用和插件硬编码行为,而不是埋头改 JSON











