命令面板搜不到自定义命令,是因为Sublime未成功注册该命令:Python文件须放Packages/User/下、类名以Command结尾、继承TextCommand/WindowCommand、实现含edit参数的run方法;Context.sublime-menu仅调用已注册命令,不参与注册。

命令面板里搜不到自定义命令?先确认它是否真被注册了
Sublime Text 的命令面板(Ctrl+Shift+P)只显示已成功注册的 TextCommand、WindowCommand 或 ApplicationCommand 实例,不是你写个 JSON 就能出现的。常见现象是:保存了 Context.sublime-menu,右键菜单也不显示,命令面板更搜不到——大概率是 Python 插件根本没加载。
- 文件必须放在
Packages/User/目录下(用Preferences → Browse Packages…确认路径),后缀为.py,比如my_utils.py - 类名必须以
Command结尾,如InsertTimestampCommand;Sublime 会自动把它转成命令 IDinsert_timestamp(全小写、下划线分隔、去Command后缀) - 必须继承
sublime_plugin.TextCommand(作用于当前视图)或sublime_plugin.WindowCommand(作用于窗口),且实现run(self, edit, **kwargs)方法——漏掉edit参数会导致文本修改静默失败 - 验证是否注册成功:打开控制台(
Ctrl+`),输入sublime.log_commands(True),再手动触发一次该命令(比如从右键菜单点一下),如果控制台没输出类似command: insert_timestamp的日志,说明 Sublime 根本没识别这个类
想让右键菜单和命令面板同时生效,别只改菜单文件
Context.sublime-menu 只是“调用器”,不是“注册器”。它不参与命令注册流程,只负责在右键时把某个已注册的 command ID 映射成一个菜单项。所以光在 Context.sublime-menu 里写 "command": "my_custom_action" 是没用的——背后必须有对应 Python 类已加载。
-
Context.sublime-menu文件必须严格命名为Context.sublime-menu(大小写敏感、无空格、无.txt或.json后缀),且仅在Packages/User/下有效 - 菜单项中的
command值必须与命令面板中完全一致:大小写、下划线、有无空格都不能错;比如类名是SortLinesCommand,命令 ID 就是sort_lines,不是sortlines或sort-lines - 推荐最小可行插件写法(存为
Packages/User/my_actions.py):import sublime import sublime_plugin class MyCustomActionCommand(sublime_plugin.TextCommand): def run(self, edit): self.view.insert(edit, 0, "Hello from command palette & right click!") - 保存后无需重启,命令立即可用;接着在
Context.sublime-menu中加一条:{"caption":"插入问候","command":"my_custom_action"}
命令面板字体和大小不能靠设置文件改,得动主题文件
命令面板(Quick Panel)属于 UI 渲染层,它的字体、大小、颜色等样式不由 Preferences.sublime-settings 控制,而由当前启用的 UI 主题(.sublime-theme)决定。直接改设置文件毫无效果。
- 先查当前主题名:打开
Preferences → Settings,看右侧用户设置中"theme"的值,比如"Default.sublime-theme" - 进入
Packages/User/,新建同名文件(如Default.sublime-theme),Sublime 会优先加载它覆盖默认主题 - 在该文件中添加针对
quick_panel_label的样式规则,例如:[{ "class": "quick_panel_label", "font.face": "Fira Code", "font.size": 14 }] - 注意 JSON 语法必须正确(无末尾逗号、引号闭合),保存后需重启 Sublime 才生效;建议每次只改一项并测试,避免样式崩坏
快捷键绑定失效?重点检查三处冲突点
即使命令已注册、菜单已配置,快捷键仍可能不响应——问题往往不在命令本身,而在绑定逻辑。
- JSON 格式错误:比如多了一个逗号、引号没闭合,保存后右下角会弹红字提示,但很多人忽略它
- 被更高优先级规则拦截:Sublime 按从左到右顺序加载键绑定,左侧默认文件里的
"keys": ["f5"]绑定到build,你在右侧也写"keys": ["f5"]却没加context,那你的规则会被默认规则覆盖 -
context条件太严:比如写了{"key": "selector", "operand": "source.python"},但在 Markdown 文件里按快捷键,自然不触发;查当前语法可按Ctrl+Shift+P→Show Scope Name看实际 scope 值 - 安全覆盖常用键的技巧:用
context做条件判断,比如让Ctrl+D在无选中时复制整行、有选中时继续多光标选择:[{ "keys": ["ctrl+d"], "command": "duplicate_line", "context": [{"key": "selection_empty", "operator": "equal", "operand": true}] }]
Packages/User/ 路径的绝对准确性。


















