atom项目树右键菜单命令必须手动编辑context-menu.cson文件,选择器需精确匹配.tree-view .file等dom结构,command须为atom已注册的有效标识符,改错即失效且无提示。

项目树右键菜单加命令必须改 menus/context-menu.cson
Atom 不提供图形界面添加项目树(即左侧 .tree-view)右键命令,所有自定义项都得手动编辑 CSON 配置文件。它不走 Windows 注册表,也不依赖插件 UI 设置——改错一个引号或逗号,新菜单项就完全不出现,且无任何报错提示。
- 文件路径固定为
~/.atom/packages/your-package-name/menus/context-menu.cson(插件开发)或~/.atom/menus/context-menu.cson(全局配置) - 必须用
context-menu顶层 key,不能塞进menu或keymap - 选择器必须精确匹配项目树 DOM 结构:
.tree-view .file(单个文件)、.tree-view .directory(文件夹)、.tree-view(空白处) - 写成
.tree-view .file, .tree-view .directory可同时覆盖文件和文件夹右键
.tree-view 选择器写错是 90% 的失败原因
你右键点的是项目树里的文件,但菜单没出来?大概率是选择器没命中。Atom 的上下文菜单靠 CSS 选择器实时匹配 DOM,不是靠“功能类型”或“路径判断”。打开开发者工具(Ctrl+Shift+I),右键目标元素 → Inspect,看最外层节点的 class 和属性:
-
.tree-view .file:只对树中每个文件行生效,不含文件夹或空白区 -
.tree-view .directory:只对带三角箭头的文件夹行生效 -
.tree-view:整个树容器,包括空白区域右键,但优先级低于更具体的选择器 - 别漏空格:
.tree-view.file(连写)≠.tree-view .file(后代选择器) - 带属性过滤要加引号:
'[data-path$=".js"]'才能匹配 JS 文件,不加引号直接解析失败
command 必须是 Atom 已注册的有效命令标识符
菜单项点了没反应?不是代码没写,而是 command 值无效。Atom 不会校验 command 是否存在,只静默忽略。
- 先按
Ctrl+Shift+P打开命令面板,输入关键词搜一下,确认你要绑的命令真实存在(如tree-view:remove、application:open-folder) - 插件自定义命令必须已在
activate()中通过atom.commands.add注册,且命名空间一致(如my-plugin:reveal-in-finder) - 大小写敏感:
core:save✅,core:Save❌ - 别拼错命名空间:
tree-view:move是官方命令,tree-view:move-file就是无效字符串
Windows 上想加“在资源管理器中打开”需额外处理
这是常见需求,但要注意:Atom 内部右键菜单(.tree-view)和 Windows 资源管理器右键菜单(注册表)完全无关。你在 context-menu.cson 里加的 tree-view:reveal-in-finder 命令,只在 Atom 窗口内生效;它调用的是 Atom 自己的逻辑,不触发系统资源管理器。
- 如果真要调系统资源管理器,得自己写 CoffeeScript/JS 调用
shell.openItem(path)(Electron API),再绑定到命令 - 注意路径权限:跨盘符或网络路径可能被 Electron 拦截,需提前检查
fs.existsSync - 别指望
command: "tree-view:open-in-system"这种写法——Atom 核心没有这个命令,也不会自动映射 - 图标、快捷键、禁用状态等高级控制,必须用动态
shouldDisplay回调,但 event 对象不可序列化,不能传复杂数据
Ctrl+Shift+P → Window: Reload 刷新,不要只靠重启编辑器——有些缓存只有重载才清掉。











