windows右键“用sublime打开”需修改注册表hkey_classes_root*shell(文件)或Directoryackgroundshell(文件夹),而sublime侧边栏右键菜单由packages/user/context.sublime-menu(json格式)控制,支持语言专属菜单如python.sublime-menu。

Windows 资源管理器右键加“用 Sublime 打开”
能加,但必须改注册表,不是 Sublime 自己的菜单——这是两个完全不相干的系统。你在文件上点右键看到的“用 Sublime 打开”,归 Windows 管;而 Sublime 侧边栏里点右键出现的菜单,归 Context.sublime-menu 文件管。
要让任意文件右键就能打开,得往 HKEY_CLASSES_ROOT*shell 写一项;想在文件夹空白处右键打开整个项目,则要写进 HKEY_CLASSES_ROOTDirectorybackgroundshell。
-
%1表示选中的文件路径,只用于文件右键;%V表示当前文件夹路径,专用于文件夹空白处右键 - 路径里所有反斜杠必须双写(
C:Program Filessublime textsublime_text.exe),单写会解析失败 - 整个可执行路径必须用英文引号包裹,且引号要成对:
""C:...sublime_text.exe" "%1"" - 图标路径(
Icon值)末尾要加,0,比如"C:...sublime_text.exe,0",否则图标可能不显示
Sublime 侧边栏右键加“在终端中打开”这类功能
这个菜单只出现在 Sublime 的侧边栏(Sidebar)里,和系统右键无关,靠的是用户目录下的 Context.sublime-menu 文件生效。
它本质是个 JSON 数组,每个对象至少要有 caption 和 command 字段。命令名必须真实存在——比如 open_in_terminal 是 Terminal 插件提供的,没装插件就静默失效,不会报错也不会显示。
- 正确路径是:
Packages/User/Context.sublime-menu(通过 Preferences → Browse Packages… 进入) - 别去动
Packages/default/Context.sublime-menu,那是只读压缩包,改了也没用 - 变量如
$file_path、$folder可直接在args里用,但注意:它们只在有上下文时才有值(比如选中一个文件,$file才非空) - 加分割线就写
{"caption": "-"},不能省略caption字段,也不能写成"-"单字符串
常见失效原因:不是语法错,而是三个“找不到”
右键菜单点了没反应、新加的项根本不出现——90% 不是 JSON 格式错了,而是以下三类“找不到”:
- 找不到命令:比如写了
"command": "open_in_browser",但没装 Open In Browser 插件,或插件被禁用 - 找不到上下文:比如用
$file却在侧边栏空白处右键(此时无文件被选中),参数为空导致命令跳过执行 - 找不到路径:Windows 用户常把
Context.sublime-menu放错位置,比如放在Packages/Default/或某个插件目录下,实际只认Packages/User/
验证命令是否存在?打开命令面板(Ctrl+Shift+P),输入命令名看能不能搜到;或者在控制台运行 sublime.log_commands(True),再右键一次,看输出什么命令被调用。
按语言类型定制右键菜单(如只在 .py 文件生效)
不需要改全局 Context.sublime-menu,直接建个语言专属文件就行。Sublime 会自动按当前视图的语法加载对应文件。
比如你只想在 Python 文件右键时出现“Run in Terminal”,就创建 Packages/User/Python.sublime-menu,内容如下:
[{"caption": "Run in Terminal", "command": "open_in_terminal", "args": {"path": "$file_path"}}]
同理,HTML 文件用 HTML.sublime-menu,Markdown 用 Markdown.sublime-menu。
- 文件名必须和语法名严格一致(大小写敏感),可通过 View → Syntax → Open all with current extension as… 查看当前语法名
- 这些文件里的
context字段可以省略,因为文件名本身已是作用域过滤 - 如果同时存在
Context.sublime-menu和Python.sublime-menu,后者优先级更高
真正容易被忽略的是:路径变量在不同上下文中行为不一致,比如 $folder 在多项目窗口里可能返回空,$file_path 在未保存的临时标签页里也为空——这些边界情况不会报错,只会让菜单项“看起来没反应”。