Sublime怎么设置自定义侧边栏右键菜单 Sublime功能扩展【进阶】

7次阅读

sublime侧边栏右键菜单由Packages/User/Context.sublime-menu文件控制,需用context字段限定node_type为file或folder才生效,且依赖插件如SideBarEnhancements。

Sublime怎么设置自定义侧边栏右键菜单 Sublime功能扩展【进阶】

侧边栏右键菜单由哪个文件控制?

Sublime 的侧边栏右键菜单(即资源管理器右键)由 Context.sublime-menu 文件统一控制,不是单独的 “sidebar” 专用文件。它和编辑区右键共用同一个配置文件,但可通过 context 字段精准限定只在侧边栏生效。

必须放在用户包路径下:Packages/User/Context.sublime-menuwindows%appDATA%sublime textPackagesUsermacOS 是 ~/Library/Application Support/Sublime Text/Packages/User/linux~/.config/sublime-text/Packages/User/

  • 别去改 Packages/default/Context.sublime-menu——它是只读内置文件,改了也无效
  • 别新建在 Packages/SideBarEnhancements/ 下——那是插件自己的目录,不参与菜单加载逻辑
  • 文件必须是 UTF-8 编码,后缀严格为 .sublime-menu(不是 .txt)

怎么让菜单项只在侧边栏出现?

context 字段过滤。侧边栏节点有明确的 node_type 属性,值为 "file""folder";而编辑区没有这个 key。所以最稳妥的写法是:

[{   "caption": "Open in Terminal",   "command": "open_in_terminal",   "args": {"dir": "$file_path"},   "context": [     { "key": "node_type", "operator": "equal", "operand": "file" }   ] }]
  • 想对文件夹也生效?把 "operand" 改成 "folder",或加一个 "or" 条件组(需 jsON 数组嵌套)
  • 只在空白处显示?用 {"key": "selection_empty", "operator": "equal", "operand": true}
  • 没加 context?那该菜单会在编辑区、标签页、侧边栏三处都出现——容易误触

命令名写错或插件没装,会怎样?

静默失败:点击菜单项毫无反应,控制台也不报错。这是 Sublime 的设计特性,不是你配错了。

  • open_in_terminalcopy_path 等命令依赖插件(如 Terminal、SideBarEnhancements),没装就不可用
  • 命令名大小写敏感:open_in_terminal ✅,OpenInTerminal
  • 查命令名最准的方法:打开命令面板(Ctrl+Shift+P),输入关键词看实时匹配项;或在控制台执行 sublime.log_commands(True) 后右键一次,看输出
  • 变量如 $file_path 只在侧边栏上下文有效;在编辑区右键时,$file 可能为空

为什么“New File”点不动?常见权限与路径陷阱

SideBarEnhancements 的 New File 不是纯前端菜单,它要实际写入磁盘。失败往往不是配置问题,而是运行时环境卡住:

  • 右键的是未加入项目的独立文件夹(比如直接拖进来的)→ 插件无法推导完整可写路径
  • 目标路径在 Program Files(Windows)或系统受保护目录(macOS)→ 没写入权限,连弹窗都不出
  • 项目根目录未设置 → 它可能 fallback 到 Sublime 安装目录下建文件(你会找不到)
  • 解决办法:先用 Project → Add Folder to Project… 把目标文件夹正式纳入项目,再右键空白处

手动添加 new_file_at 命令虽可行,但不如 SideBarEnhancements 稳定——它处理了路径解析、扩展名提示、焦点切换等细节,自定义命令容易漏掉这些。

text=ZqhQzanResources