Sublime Text 顶部菜单栏由 Packages/User/Main.sublime-menu 控制,需手动创建该 UTF-8 编码 JSON 文件,结构为扁平数组,含 caption 和 children,错误格式会导致菜单空白;隐藏项须覆盖重写,新增命令需确保存在且参数安全。

Sublime Text 的菜单栏(顶部 File/Edit/Selection 等)**不能通过 Context.sublime-menu 修改**——那是右键菜单的配置文件。要增删顶部菜单栏项,必须编辑 Main.sublime-menu,且它只在 Packages/User/ 下生效,其他路径无效。
如何定位并创建 Main.sublime-menu 文件
顶部菜单栏由 Main.sublime-menu 控制,但 Sublime 默认不生成该文件,需手动创建:
- 点击 Preferences → Browse Packages…,进入用户
Packages目录 - 打开
User文件夹,检查是否存在Main.sublime-menu - 若不存在,新建纯文本文件,**严格命名为
Main.sublime-menu(首字母大写、无空格、无 .txt 后缀)** - 保存为 UTF-8 编码;Windows 路径示例:
%APPDATA%\Sublime Text\Packages\User\Main.sublime-menu - 文件内容必须是合法 JSON 数组,每个对象代表一个顶层菜单(如
"caption": "File")或分隔线("caption": "-")
Main.sublime-menu 的结构与常见错误
该文件是扁平 JSON 数组,顺序即菜单显示顺序。错误常出现在结构和上下文上:
- 顶层对象必须含
"caption"字段,值为菜单名(如"File"),不可漏引号 - 子菜单用
"children"数组嵌套,不是"items"或"menu" - 命令调用必须用
"command"+"args",且command名需真实存在(比如"show_panel"有效,"open_in_browser"通常不存在) - 别直接复制右键菜单的 JSON 结构——
Main.sublime-menu不支持"context"字段,加了会整个菜单失效 - 少一个逗号、多一个逗号、引号用中文标点,都会导致菜单栏变空白;可打开 Ctrl+` 控制台查看
error loading menu提示
隐藏原生菜单项的可靠方式
Sublime 没有“禁用某菜单项”的开关,隐藏只能靠**覆盖式重写**:
- 完整复制默认菜单结构(可从
Packages/Default/Main.sublime-menu中参考,但不要直接改它) - 在
User/Main.sublime-menu中只保留你想留下的菜单项,删掉"caption": "Tools"就等于隐藏 Tools 菜单 - 想隐藏某个子项(如 Edit → Line Operations → Sort Lines),就删掉对应
children中那个对象 - 注意:删除后无法通过快捷键触发(如
Ctrl+Shift+P仍可用,但菜单里没了) - 如果只是想简化,更轻量的做法是用插件(如
MenuEditor)动态管理,而非硬编码 JSON
新增菜单项并绑定命令的实操要点
新增项本质是往某个 "children" 数组里加对象,关键在命令可达性和参数安全:
- 内置命令查文档或控制台输入
sublime.log_commands(True),然后点菜单看输出,确认command名拼写(如"set_syntax",不是"change_syntax") - 传参用
"args",例如切换到 Python 语法:{"syntax": "Packages/Python/Python.sublime-syntax"} - 路径类参数(如
"file")慎用变量:$file在菜单栏上下文中不解析,仅右键菜单支持;菜单栏里要用绝对路径或空值 - 自定义插件命令(如你写的
my_custom_command)必须已加载,且plugin_loaded()执行无错,否则点击报command not found - 新增项建议加
"id"字段(如"id": "my-tools"),方便未来被其他插件或 override 规则识别
菜单栏修改比右键菜单更脆弱:JSON 格式错一点,整个顶部菜单消失,且无明显提示;调试时优先开控制台,而不是反复重启。另外,升级 Sublime 后,Main.sublime-menu 不会自动迁移或合并,默认菜单逻辑全由你接管,这点容易被忽略。


















