惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
GbyAI
GbyAI
美团技术团队
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
U
Unit 42
P
Proofpoint News Feed
V
V2EX

暗无天日

读:AI Agent 安全日志——从可见性与隐私的两难说起 - 暗无天日 AI写作的语言指纹——如何让文字不那么像机器 - 暗无天日 读:50 条 Claude Code 技巧——一个工程经理的六个月使用心得 读:AI 辅助开发为什么让 E2E 测试更有价值 - 暗无天日 读:在Emacs中使用Claude Code(Spacemacs适配版) - 暗无天日 Claude Code 背后的工程哲学——读 Agent Harness Engineering 读:Agent Harness Engineering——AI 智能体不只是模型,还有套件 - 暗无天日 browser-harness:让 AI 直接接管你的浏览器 - 暗无天日 读:Security-First CI/CD —— DevSecOps 自动化实践指南 TIL: 数字小键盘的小数点陷阱与行内算术求值 - 暗无天日 读:Immutability 不是万能药,它是一种权衡 - 暗无天日 Conducty:给 Claude Code 加上项目记忆和并行执行能力 - 暗无天日 读 — GitHub Trending 里的 Claude Code 技能包 读 — Prompt Caching 省钱指南 TIL: Emacs 中那些跟鼠标配合的冷门快捷键 - 暗无天日 读:Anvil——把 Emacs 变成 AI 的工具服务器 读:Emacs 代码折叠终极指南 - 暗无天日 读:Clojure 搭车客指南 - 暗无天日 git推送失败后恢复仓库损坏的完整记录 - 暗无天日 多智能体系统的两个有效模式——以及对 Claude Code 用户的启示 - 暗无天日 用 Org Babel 写 Literate 博文:扩展执行 + 定制导出 proced:Emacs 内置的进程查看器 - 暗无天日 从 proced 定制中学到的 Elisp 模式 读:让 Emacs proced 在 macOS 上显示 CPU 和内存 异步编程的函数着色税 - 暗无天日 链式调用的代价:JavaScript 和 Clojure 的共同教训 - 暗无天日 hyperfine:命令行基准测试工具 - 暗无天日 管道中的变量去哪了?——子 shell 作用域陷阱 - 暗无天日 开源包装器的信任陷阱:四个危险信号 - 暗无天日 程序员愿意为 AI 写文档,却不愿为同事写 - 暗无天日
TIL: elisp-fontify-semantically——让 Emacs 看懂你的 Elisp ...
2026-05-19 · via 暗无天日

Emacs 的传统 font-lock 是 *语法高亮*——看到括号、字符串、关键字就上色,但它不区分 foo 到底是函数、变量还是一个宏。Emacs 31 新增了一个用户选项 elisp-fontify-semantically ,把这事改了。

什么是语义高亮

语义高亮和语法高亮的区别很简单:

  • 语法高亮 :看到 defun 上色、看到字符串上色、看到注释上色。不关心符号的*角色* 。
  • 语义高亮 :分析代码结构,搞清楚每个符号是干什么的——函数名、局部变量、全局变量、宏、feature 名、face 名……各自用不同的 face 渲染。

比如下面这段代码:

(defun greet (name)
  (message "Hello, %s" name))

开了语义高亮后, defunmessagename 会用 三种不同颜色 显示——定义关键字、函数调用、局部变量,一目了然。而传统 font-lock 对这三个符号一视同仁。

怎么开

一行配置:

(setopt elisp-fontify-semantically t)

打开任意 Elisp buffer 就能看到效果。如果代码属于 trusted-content-p (Emacs 认为可信的代码文件,如自己项目的源码、已安装的包等),完整分析会开启;不可信 buffer 里部分宏参数可能不会高亮。

配套的还有 elisp-add-help-echo (默认开启),鼠标悬停在函数名上会弹出它的 docstring。

开了 cursor-sensor-mode (=M-x cursor-sensor-mode= )后,当前光标所在局部变量的所有出现位置也会被高亮。

版本要求

这个变量是 Emacs 31(当前 master 分支)新增的,Emacs 30 上没有。

如果你在用 Emacs 30 但想尝鲜,MELPA 上有个 lisp-semantic-hl 包是类似功能的 backport(向后移植)。不过语义分析依赖 Emacs 31 内置的 scope.el ,backport(向后移植) 版本功能可能不完整。

一个小提醒

编辑非常大的 defun 时语义分析会有点慢,这是 emacs-devel 上确认过的。日常 Elisp 配置文件的体量不会有感觉。