atom右键菜单项顺序由cson数组索引决定,越靠前越靠上;同一选择器下菜单按数组顺序显示,分隔线也占索引位;不同选择器区域(如atom-text-editor、.tree-view、atom-workspace)的菜单按定义顺序叠加,互不影响。

右键菜单项顺序由CSON数组索引决定
Atom上下文菜单的显示顺序完全取决于menus/context-menu.cson(或对应平台的win32.cson/darwin.cson)中数组元素的排列位置——**越靠前,越靠上**。它不支持CSS权重、优先级字段或数字序号配置,纯靠数组顺序驱动。
- 修改时必须保持整个数组结构合法:每个菜单项是对象,用逗号分隔,末尾不能多逗号
- 想把“复制文件路径”提到最前面?把它从原位置剪切,粘贴到
'atom-text-editor': [之后的第一个位置即可 - 插入分隔线
{type: 'separator'}也占一个数组索引位,它的位置同样影响上下菜单项间距 - 如果某项没出现,不是顺序问题,而是选择器不匹配(比如写成
'atom-workspace'却在编辑器里右键)
不同选择器区域的菜单顺序互不影响
Atom右键菜单是“按区域叠加”的:你在编辑器里右键,会同时合并匹配atom-text-editor、.overlayer、atom-workspace等多个选择器的菜单项。但它们的合并逻辑是“先定义的区域优先”,而非按字母或层级排序。
-
'atom-text-editor': [ ... ]里的项永远显示在最上方 -
'.tree-view': [ ... ]里的项紧随其后(项目树右键时才生效) -
'atom-workspace': [ ... ]是兜底项,排在最后(工作区空白处右键时可见) - 同一选择器下多个同label命令不会覆盖,而是全部显示——顺序只在同一数组内有效
插件自带菜单和用户自定义菜单谁先显示?
插件的menus/context-menu.cson和你手动改的~/.atom/packages/your-package/menus/...属于同一加载机制,但**加载顺序取决于包启用顺序和文件路径字典序**,不可控。想确保你的菜单置顶,唯一可靠方式是:在你自己包的CSON里,把关键项放在该选择器数组的最前面,并避免依赖其他插件的菜单项位置。
- 不要试图用
command名排序——Atom不解析命令名,只读数组顺序 - 禁用冲突插件(如多个汉化包、多个列选择插件)能减少菜单项来源干扰
- 改完保存后无需重启,但若菜单未刷新,可执行
Window: Reload强制重载配置 - 用
Application: Inspect(开发者工具)右键检查实际触发的选择器,确认你正在编辑的是正确目标区域的配置











