ctrl+c等快捷键没反应,90%是按键未进入sublime:先用sublime.log_input(true)验证,无输出则被系统/输入法/显卡热键拦截;有输出则检查绑定加载顺序、插件冲突、json语法错误或不可修改的硬编码键。

Ctrl+C、Ctrl+V、Cmd+Shift+P 这类快捷键没反应,90% 不是 Sublime 坏了,而是按键根本没进到它里面。
按键连 Sublime 都没进到,别急着改 Key Bindings
按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按你怀疑失效的组合键(比如 Ctrl+C)。如果控制台**完全没输出**,说明系统或外围软件把键截掉了:
- Windows 用户重点查:NVIDIA / Intel 显卡控制面板里是否启用了
Ctrl+Alt+方向键类热键 - 搜狗、QQ 拼音等输入法默认绑了
Ctrl+Space或Ctrl+Shift切换中英文,一按就切走,Ctrl+C根本传不进来 - macOS 用户去「系统设置 → 键盘 → 快捷键」,关掉 Spotlight 的
Cmd+Space和「输入源」里的同名切换快捷键
按键进了 Sublime,但命令没执行
如果控制台输出了 key evt: ctrl+c,说明按键已送达,问题出在绑定层。Sublime 的快捷键加载顺序是:Default(内置)→ 插件自带的 Default.sublime-keymap → User(你写的)。后加载者覆盖前加载者:
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(Default)搜
ctrl+c,确认原命令是copy - 在右侧(User)和插件目录(
Preferences → Browse Packages)里全局搜索"ctrl+c",看谁最后定义了它 - 临时禁用插件最省事:用
Package Control: Disable Package逐个关掉Vintage、Emmet、GitGutter
User.sublime-keymap 写错 JSON 就静默失效
你在 Key Bindings – User 里写的任何规则,只要语法错一点,整段都会被 Sublime 忽略,且不报错:
- 必须用英文双引号,不能用中文引号或单引号:
{"keys": ["ctrl+alt+f"], "command": "format_code"} - 数组末尾不能多逗号,对象末尾也不能多逗号
- JSON 不支持注释,想禁用某条绑定,要么删整行,要么改成无效命令:
"command": "not_a_real_command" - 改完一定要按
Ctrl+S保存,Sublime 会立即重载,但若某个插件的Default.sublime-keymap里也有同keys,且加载更晚,你的自定义仍会被盖掉
Esc、Tab 这类键根本不能靠 Key Bindings 改
escape 关搜索框、关命令面板、关替换栏,是 Sublime 内核硬编码行为,Default 和 User 文件里搜不到任何 escape 绑定。手动加一条:
{"keys": ["escape"], "command": "hide_panel"}
不仅无效,还可能破坏原生逻辑。真要排查:
- 先用
sublime.log_input(True)看 Esc 是否有输出:没输出 = 系统/键盘固件拦截;有输出但 UI 不响应 = 插件劫持(如Vintage把 Esc 当退出插入模式用) - 插件劫持得去对应设置里关:比如
Vintage的Package Settings → Vintage → Settings中设"exit_insert_mode_on_escape": false - macOS 用户额外检查「系统设置 → 键盘 → 键盘导航」是否勾选了「使用 F1、F2 等键作为标准功能键」
真正难搞的不是怎么改,而是分清“按键没进来”“进来但被插件吞了”“进来但绑定写错了”“压根不能改”这四层——漏掉一层,就白调半天。











