cmd+tab和cmd+shift+[1-9]在macos上不切换sublime文件,因系统级劫持(如dock占用),需在系统设置→键盘→快捷键中删除冲突条目;ctrl+tab失效多由vintage等插件context规则导致,可safe-mode验证;cmd+p切文件应改用{"overlay":"goto","show_files":true}绑定;user.sublime-keymap须严格遵循json格式。

Cmd+Tab 或 Cmd+Shift+[1-9] 在 macOS 上不切换文件?先看系统是否劫持
Sublime Text 本身不处理 Cmd+Tab(应用切换)或 Cmd+Shift+[1-9](Dock 应用切换),这两个组合根本不在它的 Key Bindings 管辖范围内。你按了没反应,大概率是 macOS 自己吞掉了——比如 Dock 设置了「在 Dock 中显示最近使用的应用程序」并绑定了 Cmd+Tab,或者「使用键盘导航在 Dock 中选择项目」启用了 Cmd+Shift+方向键类行为。
验证方式:按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按 Cmd+Shift+1。如果控制台完全没输出,说明信号压根没进 Sublime,直接去系统设置 → 键盘 → 快捷键 → 应用快捷键里搜 Cmd+Shift+1,删掉 Finder、Dock 或其他软件的冲突条目。
- macOS Ventura 及更新版本中,
Cmd+Shift+[1-9]默认被 Dock 用于「在 Dock 中选择第 N 个应用」,需手动禁用 - 不要指望靠改
User.sublime-keymap拦截这些组合——它们在 Sublime 启动前就被系统级事件循环吃掉了 - 临时测试可切到系统自带「简体中文-拼音」输入法,排除搜狗/百度输入法劫持
Cmd+Shift+P后连带干扰其他 Cmd 组合的可能
Ctrl+Tab / Ctrl+Shift+Tab 切换标签页失效?查插件 context 和加载顺序
这个组合是 Sublime 原生支持的(对应 next_view_in_stack / prev_view_in_stack),但极易被 Vintage、Origami、SideBarEnhancements 这类插件覆盖。关键不是“有没有定义”,而是“在哪一层定义的”以及“满足什么条件才触发”。
打开 Preferences → Key Bindings,左右并排查看:
左侧 Default 文件中搜 "ctrl+tab",确认它原本绑定的是 next_view_in_stack;
右侧 User 文件和所有插件目录(Packages/Vintage/Default.sublime-keymap 等)中全局搜索相同 "keys" 字段。
- Vintage 插件默认在
insert模式下禁用Ctrl+Tab,只保留 normal 模式有效——这不是 bug,是它的 context 规则:"context": [{"key": "setting.command_mode"}] - Origami 插件若启用了
close_on_escape或自定义 tab 导航,会把Ctrl+Tab重定向到origami_focus_next_panel,且不提供 fallback - 安全验证法:运行
subl --safe-mode,如果此时Ctrl+Tab恢复,就坐实是插件干扰,而非配置错误
想用 Cmd+P 或 Ctrl+P 切文件但总弹出命令面板?别硬改,换 overlay 类型
Cmd+P(macOS)和 Ctrl+P(Windows/Linux)默认触发的是 show_overlay 命令,参数为 {"overlay": "command_palette"}。你想让它切文件,不能删掉原绑定,否则 Package Control、插件安装等依赖命令面板的功能会断——正确做法是加一条更高优先级的新绑定,指向文件列表 overlay。
在 Preferences → Key Bindings – User 中插入:
[{"keys": ["cmd+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true}}]
注意:
• "overlay": "goto" 是文件跳转专用 overlay,"show_files": true 强制显示当前项目所有文件
• 不要写成 "overlay": "file_switcher" —— Sublime 早已废弃该参数名,会静默失败
• 如果你同时装了 FileDiffs 或 AdvancedNewFile,它们可能注册了同名 overlay,优先检查其文档是否提供禁用开关
User.sublime-keymap 写错一个标点,整个文件就失效
这个文件是纯 JSON 数组,不是 JS 对象,也不是 INI 配置。一个中文逗号、多写的尾逗号、漏掉的引号,都会让 Sublime 静默忽略全部内容——右下角红字提示一闪而过,多数人根本没看见。
- 必须用英文双引号:
"keys"不是keys,"show_overlay"不是show_overlay - 数组结尾不能多逗号:
["cmd+p"],是错的,["cmd+p"]才对 - 不支持任何注释:
//或/* */会直接导致解析失败 - 临时禁用某条绑定?删整行,或改成无效命令:
"command": "not_a_real_command"
改完立刻 Ctrl+S 保存,无需重启,但得确保没有其他插件在更靠后的位置又绑了一次——比如 Packages/Emmet/Default.sublime-keymap 里也写了 cmd+p,它就会覆盖你的 User 设置。











