atom无法直接高亮自定义关键词(如todo),因其语法高亮基于textmate token切分而非字符串搜索;需用language-todo插件识别专用scope(如keyword.todo.todo),再配合styles.less定制颜色。

Atom 本身不支持直接配置“高亮任意关键字”(比如把所有 TODO 或 FIXME 手动加粗),它靠的是语法 scope + 主题样式或插件协作;想稳定高亮关键词,必须用 language-todo + todo-show 组合,或改 styles.less 硬匹配文本——但后者不区分上下文,容易误伤。
为什么直接在 styles.less 里写 .syntax--keyword { color: red } 不行?
因为 .syntax--keyword 是语法解析器打的通用 scope,它只覆盖语言内置关键字(如 if、return),不会命中你自定义的标记词(如 WIP、HACK)。Atom 的语法高亮是基于 TextMate 规则的 token 切分,不是全文字符串搜索。硬加 CSS 选中器会失效或完全没反应。
- 查当前光标位置的真实 scope:按
Ctrl+Shift+P→ 输入Editor: Log Cursor Scope,看输出第一行(比如source.js) - 想高亮
// TODO这类注释内关键词,scope 实际是.syntax--comment下的子节点,不是独立 keyword - 直接写
span:contains("TODO")在 Atom 里无效——编辑器不支持 jQuery 式 DOM 查询
用 language-todo 插件实现语义化关键词高亮
language-todo 是唯一被社区验证能稳定识别并着色待办标记的方案,它把 // TODO:、/* FIXME */ 等识别为专用 scope(如 keyword.todo.todo),再由主题或 styles.less 控制颜色。
- 必须安装
language-todo(不是可选,是基础依赖);否则todo-show只能搜出内容,但编辑器里不着色 - 确认右下角 grammar 显示正确:打开一个 JS/TS 文件,写一行
// TODO: fix this,状态栏应显示对应语言名(如JavaScript),不是Plain text - 默认只识别带冒号的格式(
// TODO:),若想匹配// TODO(无冒号),需进language-todo设置页勾选Match without colon - 高亮颜色由语法主题决定;若想强制绿色,可在
styles.less加:.syntax--keyword.syntax--todo { color: #4caf50 !important; }
用 styles.less 硬匹配纯文本(慎用)
如果只是临时需要视觉提示,且不介意误匹配(比如把变量名 todoId 也高亮),可用 CSS 伪元素配合正则式匹配——但 Atom 原生不支持,得靠第三方插件 highlight-column 或 atom-textual-velocity 辅助。更实际的做法是:
- 打开
Atom → Config → Open Config Folder,编辑styles.less - 添加如下规则(仅对注释生效,降低误伤):
.syntax--comment .syntax--punctuation, .syntax--comment .syntax--keyword { color: #ff5252 !important; } - 或者用更暴力的方式(风险高):
atom-text-editor::shadow .line .syntax--comment:after { content: "⚠"; color: #ff9800; }——但这会破坏行高,且部分 Atom 版本已禁用::shadow - 保存后自动热更新;若文字消失,说明
color设成了透明或与背景同色
容易被忽略的关键点
所有关键词高亮都只作用于当前打开的文件,不跨标签页,也不扫描未加载的项目文件。如果你在 Vue 文件里写了 // TODO,但右下角显示的是 text.html.vue 而非 source.vue,那 language-todo 根本不会触发——此时要先解决 Vue 语法映射问题,而不是调颜色。











