sublime怎么设置右键菜单_sublime添加右键打开功能

1次阅读

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

sublime怎么设置右键菜单_sublime添加右键打开功能

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 数组,每个对象至少要有 captioncommand 字段。命令名必须真实存在——比如 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-menuPython.sublime-menu,后者优先级更高

真正容易被忽略的是:路径变量在不同上下文中行为不一致,比如 $folder 在多项目窗口里可能返回空,$file_path 在未保存的临时标签页里也为空——这些边界情况不会报错,只会让菜单项“看起来没反应”。

text=ZqhQzanResources