右键菜单点“运行”没反应,主因是Sublime的Context.sublime-menu文件位置错误、命令名不匹配或context条件未满足。

右键菜单点“运行”没反应?先确认命令名和文件路径是否匹配
Sublime 的右键菜单不执行命令,90% 是因为 command 字段写的不是真实注册的命令名,或者 Context.sublime-menu 文件根本没放对位置。它不会报错,只是静默忽略——你点一下,什么都没发生。
-
Context.sublime-menu必须放在Packages/User/目录下,不能是Packages/Default/或其他插件目录 - 文件名必须严格为
Context.sublime-menu(注意大小写,Windows 不敏感但 macOS/Linux 敏感) - 用
sublime.log_commands(True)在控制台里验证:右键 → 看控制台有没有输出command: xxx;没输出说明文件压根没加载 - 命令名别靠猜,比如想运行 Python 脚本,别写
"command": "run_python"—— Sublime 默认没有这个命令,得用"command": "exec"并配args
想右键直接运行当前文件?用 exec 命令 + 正确 args 配置
内置 exec 命令能跑 shell 命令,但默认只在构建系统里用;要让它出现在右键菜单并执行当前文件,必须手动传参,且注意路径变量展开时机。
-
$file和$file_path在右键菜单里可用,但$packages、$platform这类变量不生效 - Python 文件一键运行示例:
[{ "caption": "Run Python File", "command": "exec", "args": { "cmd": ["python", "$file"], "shell": true, "working_dir": "$file_path" } }] - Windows 下如果 Python 不在 PATH,得写绝对路径,比如
["C:/Python39/python.exe", "$file"] -
shell: true在 Windows 上启用 cmd,在 macOS/Linux 上启用 sh;设为false则走原生进程,但参数不能含空格或特殊字符
为什么右键菜单里“运行”选项有时灰掉?context 条件没写对
菜单项是否显示,取决于 context 字段的匹配逻辑。不写 context,它默认只在编辑区文本上出现;想在侧边栏文件上也显示,必须显式声明。
- 只在有打开的文件时显示(即非新建未保存 tab):
"context": [{"key": "selector", "operator": "equal", "operand": "source"}] - 只在侧边栏选中文件时显示:
"context": [{"key": "panel", "operator": "equal", "operand": "side_bar"}, {"key": "selection_length", "operator": "greater_equal", "operand": 1}] - 同时支持编辑区和侧边栏:
"context": [{"key": "selector", "operator": "equal", "operand": "source"}, {"key": "panel", "operator": "equal", "operand": "side_bar"}] - 漏掉
"key": "panel"却指望侧边栏右键出现菜单,结果就是“明明写了却看不到”
自定义运行命令容易被忽略的三个细节
这些点不报错、不警告,但一碰就失效,而且很难定位。
- JSON 里所有字符串值(包括
caption、command、operand)必须用英文双引号,中文引号或单引号直接让整个菜单失效 -
exec的cmd数组里,路径变量如$file不会被自动展开成绝对路径——它只是字符串替换,如果文件路径含空格,["python", "$file"]会崩,得用shell: true或改用["sh", "-c", "python '$file'"] - 如果你装了
Terminus或Terminal插件,想右键“在终端运行”,别用exec,改用插件提供的命令如"command": "terminus_open",并确认插件已启用、命令已注册(查sublime.log_commands(True)输出)











