直接修改 styles.less 是最快的颜色微调方式,仅影响渲染样式(如关键字变红、字符串加下划线、函数名加粗),不改动语法解析逻辑;需用 !important 覆盖默认样式,并通过 Editor: Log Cursor Scope 获取准确 scope 链以确保选择器匹配。

直接改 styles.less 最快,但只影响颜色,不改变语法识别
想让某个关键字变红、字符串加下划线,或者函数名加粗,styles.less 是最直接的入口。它不碰语法解析逻辑,只接管最终渲染样式,适合快速微调。
打开 Atom → Open Your Stylesheet(即 ~/.atom/styles.less),在里面加规则就行。注意两点:
- 必须用
!important覆盖主题默认样式,比如:.syntax--string { color: #ff6b6b !important; } - 作用域名得对——不能瞎猜,把光标停在目标代码上,按
Ctrl+Shift+P执行Editor: Log Cursor Scope,看控制台输出的真实 scope 链,例如support.function.console.js或entity.name.function.ts - Tree-sitter 启用后,scope 名会变(比如从
keyword.control变成keyword.control.js),旧样式可能失效,得同步更新选择器
写 grammars/*.cson 才算真正自定义语法识别逻辑
如果现有 language 插件漏高亮了某个新语法(比如 Vue 3 的 defineProps 宏、Rust 的 async fn)、或你用的是冷门配置文件(如 .env.local),就得自己写 grammar 规则。这不是改颜色,是教 Atom “这段文本到底是什么”。
步骤很明确:
- 进
~/.atom/packages/新建目录,比如language-dotenv - 写
package.json,确保"name"以language-开头,"engines.atom"匹配你当前 Atom 版本(如"1.60.0") - 在
grammars/下建dotenv.cson,填入:'scopeName': 'source.env' 'name': 'dotenv' 'fileTypes': ['env', 'env.local', '.env'] 'patterns': [ { 'match': '^\s*#.*$' 'name': 'comment.line.number-sign.env' } { 'match': '^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$' 'captures': '1': 'name': 'variable.other.readwrite.env' '2': 'name': 'string.unquoted.env' } ] - 重启 Atom,新建
.env文件试试;右下角应显示 “dotenv”,Editor: Log Cursor Scope能看到source.env链
core.fileTypes 映射错了,再好的 grammar 也白搭
很多人写了 grammar,也装了插件,但打开文件还是 Plain text——问题大概率出在 config.cson 的 core.fileTypes 配置上。Atom 不靠文件后缀自动选 grammar,而是查这个映射表。
编辑 ~/.atom/config.cson,在 core: 下加:
fileTypes:
'.env': 'source.env'
'.conf': 'source.nginx'
'.proto': 'source.protobuf'
关键点:
- 键名必须带点,比如
'.env',不是env或*.env - 值必须是 grammar 的
scopeName,不是插件名或文件名(source.env≠language-dotenv) - 如果有冲突映射(比如
'*.conf': 'source.ini'),它会覆盖language-nginx的自动检测,删掉或注释掉 - 改完不用重启 Atom,但新开文件才生效;已打开的未保存文件仍为
text.plain
别在 styles.less 里写 @syntax-color-xxx 变量
有人翻到 one-dark-syntax/variables/syntax-variables.less,想照着改 @syntax-color-string 来统一配色——这行不通。这些变量只被对应 syntax theme 的 Less 编译时读取,styles.less 是运行时注入的 CSS,无法参与变量计算。
真要全局改颜色,只有两个正路:
- 换 syntax theme(比如从
one-dark-syntax换成atom-material-syntax),然后在它的设置页调饱和度/亮度 - 在
styles.less里用具体 CSS 选择器硬覆盖,比如:.syntax--string, .syntax--string .syntax--quoted { color: #e6db74 !important; } - 如果你用的是 Tree-sitter grammar(如
language-rust-bundled),它的 scope 名更细(string.quoted.double.rust),CSS 选择器必须精确匹配,否则无效
最常被忽略的其实是作用域链深度:一个 const 在 JSX 里可能是 keyword.control.js.jsx,而在纯 JS 里只是 keyword.control.js,少一层就套不上样式。

















