必须先执行Editor: Log Cursor Scope确认作用域,若为text.plain则说明未识别为代码;新建文件需保存为正确后缀或手动切换语法,且需检查language插件启用状态、禁用grammar-selector、清除config.cson中冲突映射。

语法高亮失效不是插件坏了,而是 Atom 没把当前文件当代码解析——哪怕后缀是 .js 或 .xml,作用域也可能是 text.plain。必须先确认作用域,再针对性修复。
怎么确认 Atom 真正识别了文件类型
高亮全灰、括号不配对、关键字无色,都是“没识别”的信号。不能靠后缀或状态栏文字判断,得看真实作用域链:
- 把光标停在任意标签或函数名上(比如
<div> 或 <code>console.log) - 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并执行Editor: Log Cursor Scope - 打开 DevTools 控制台(
Ctrl+Alt+Shift+P),看输出的第一行:若为source.js、source.xml、source.nginx,说明 grammar 已生效;若只有text.plain、text.html或source.ass,就还没进入语法解析流程 - 新建文件后,必须先保存为正确后缀(如
index.js、nginx.conf),才能触发对应 language 插件的自动匹配 - 不保存时可手动点击右下角状态栏的语言名(如 “Plain Text”),从弹出菜单中选目标 grammar(如 “JavaScript”、“Nginx”)
- 若想让所有新建文件默认用某语言(比如 Python),需编辑
~/.atom/config.cson,在core:下加fileTypes:映射:core:<br> fileTypes:<br> '.py': 'source.python'<br> '': 'source.python'
注意:''表示无扩展名的新建文件,source.python必须和Editor: Log Cursor Scope输出的 scope 名完全一致 - 检查
Settings → Packages中对应插件是否为 Enabled(蓝色),不是灰色禁用状态(例如language-nginx、language-vue-component) - 禁用
grammar-selector插件(如果装了)——它的 “Force Grammar” 功能会直接跳过 language 插件的自动检测逻辑 - 打开
~/.atom/config.cson,搜索"*.conf"、"*.xml"这类全局映射,删掉类似"*.conf": "source.ini"的行;这类规则会抢在 language 插件前绑定 grammar,导致language-nginx完全不加载 - 确保没在
config.cson外的文件(如styles.less)里写语法映射——无效 - 确认已手动在
Settings → Themes → Syntax Theme中选中一个主题(如one-dark-syntax),只安装不启用等于没装 - 深色背景 + 浅色主题(如
atom-one-light)会导致字符串、注释不可见;换用高对比主题(如atom-material-syntax)或在~/.atom/styles.less中补全关键样式:.syntax--source.syntax--js .syntax--string { color: #e6db74 !important; }<br>.syntax--comment { color: #75715e !important; } - 括号高亮看不见?不是
bracket-matcher失效,而是主题把它设成了rgba(255,255,255,0.05)。在styles.less加:.bracket-matcher .region { background-color: rgba(100, 200, 255, 0.3) !important; border: 1px solid #64c8ff !important; }
为什么新建文件或未保存文件永远不亮
Atom 对未保存的 untitled 文件默认强制设为 text.plain,这是设计行为,不是 bug。它不会猜测语言,也不会读内容推断类型。
language 插件装了但还是不亮,常见压制点
插件启用 ≠ 自动接管。很多失效是被其他配置静默覆盖,而非插件本身问题。
作用域对了但颜色还是淡/错位/全灰
这说明语法解析成功了,但 syntax theme 没定义对应作用域的颜色,或主题 CSS 被背景色压制。
最易忽略的是:作用域名必须完整、精确、大小写敏感;source.vue 和 text.html.vue 是两个世界,配错一个字母,styles.less 里写再多 !important 也白搭。

















