atom新建文件默认为plain text,因设计上拒绝自动猜测语法;必须安装对应language插件并在config.cson中精确配置filetypes映射,且scope名须完全匹配,否则高亮失效。

Atom 不会自动“猜”文件语法,必须靠显式配置才能让新文件或特定后缀文件正确高亮——这不是缺陷,是设计原则。核心就两条:装对 language 插件 + 在 config.cson 里写准 fileTypes 映射。
为什么新建文件永远是 Plain text?
Atom 启动时新建的 untitled 文件默认用 text.plain scope,不触发任何语法解析。它拒绝猜测,所以不会根据内容(比如写了 console.log())或文件名(比如叫 index)自动切语言。这是有意为之,不是 bug。
- 已有文件若没后缀(如
nginx)或后缀未被映射(如.env),也会卡在text.plain - 右下角状态栏显示 “Plain text” 是最直接信号,说明后续所有高亮、括号匹配、TODO 识别都会失效
- 改了
config.cson后,已打开的 untitled 标签页不会变,必须新开一个才生效
怎样让 .js/.py/.vue 等文件一打开就高亮?
分两步:先确保对应 language 插件已安装并启用,再在 config.cson 中配 fileTypes。scope 名必须完全匹配,错一个字母都不行。
- 查 scope 名的可靠方法:打开一个已正确高亮的文件 →
Ctrl+Shift+P→ 输入Editor: Log Cursor Scope→ 看第一行输出,例如source.js或source.vue - 常见映射示例(加到
config.cson的core:下):'.js': 'source.js''.py': 'source.python''.vue': 'source.vue''.env': 'source.env' -
.vue文件要高亮<style lang="scss"></style>里的变量,还得额外在customFileTypes:下加'source.css.scss': ['vue']
为什么装了插件还是不亮?三个高频卡点
language 插件装了 ≠ 自动接管,很多失效是因为底层机制被覆盖或抑制。
-
grammar-selector插件如果启用了 “Force grammar” 功能,会强制覆盖fileTypes映射,导致所有.conf被当成 INI -
config.cson里误写了全局匹配,比如"*.conf": "source.ini",会把nginx.conf也拖进 INI 语法,哪怕已装language-nginx - 插件本身没启用:Settings → Packages → 搜
language-vue,确认状态是 “Enabled”,灰色表示禁用,高亮失效却无提示
如何验证语法是否真被识别?
别只看颜色,颜色可能被主题压住。唯一可信的是作用域链输出。
- 光标停在函数名上(如
map),Ctrl+Shift+P→Editor: Log Cursor Scope,输出应含entity.name.function这类具体作用域,而不是只有text.plain - Vue 文件若输出
text.html.vue,说明language-vue没加载成功,或被其他插件(如language-html)降级覆盖 - 如果输出里有
support.class但没source.js,说明 Tree-sitter 解析器在运行,但旧语法主题 CSS 选择器可能不匹配新作用域名
真正难的不是配哪一行,而是理解 Atom 的语法识别是“链式依赖”:插件提供 grammar → config.cson 告诉 Atom 什么后缀走哪个 grammar → 主题按 grammar 输出的作用域上色。漏掉任意一环,高亮就断在半路。











