我只是想让 Emacs 看起来好看一点——在终端中使用 24 位颜色
为了让 Emacs 在终端模拟器中使用完整的 24 位“truecolor”,人们必须面对终端标准、terminfo 数据库以及 `TERM` 和 `COLORTERM` 等环境变量背后的历史复杂性。评论者们在如何让颜色可靠地穿过 tmux、screen、SSH 和 TRAMP 等层时分享实用方案,也争论究竟值不值得深入研究转义码,还是直接使用图形界面 Emacs 或默认更好的现代终端。讨论还凸显了对旧标准的普遍不满、跨平台兼容性怪癖(尤其是 macOS Terminal 和 Windows),以及在折腾终端美观与直接使用更集成的编辑器如 VS Code 之间的权衡。
终端颜色支持与配置
- 很多人指出,24 位/“truecolor” 在大多数终端里其实已经可以工作了(Linux、Windows 10+、iTerm2、Kitty 等),只要使用简单的 ANSI 转义序列;通常
COLORTERM=truecolor再加上emacs -nw就足够了。 - 一些人认为现在几乎不需要再碰 terminfo;这篇文章被视为一次令人印象深刻的深入探讨,但对典型配置来说有些过度。
- 另一些人则报告说
COLORTERM并不稳定,尤其是在经过screen/tmux时,并展示了会根据$TERM设置或取消它的 shell 逻辑。 - 有些人更喜欢直接在终端里调校 16 色调色板,并让 Emacs 继续使用符号颜色名,这样所有东西(Emacs、
ls、其他应用)看起来都能保持一致,而不必依赖 24 位颜色。
Terminfo、TERM 以及检测痛点
- Terminfo 被广泛形容为晦涩且脆弱;人们抱怨它维护保守,也很难加入现代能力。
- 一些终端作者干脆声称自己是
xterm/rxvt,然后“处理后果”,而不是去和 terminfo 描述较劲。 - 另一些人强调不要把转义序列输出到非 TTY 输出中,主张使用
isatty()检查;而也有人希望默认相反(总是彩色显示,针对可机器读取的输出则使用显式参数)。这里没有形成共识。
终端版 Emacs 与图形界面 Emacs
- 很多人认为最简单的做法是直接运行图形界面 Emacs,它具有一流的 GUI 支持、真正的字体、图像、鼠标集成,并且完全绕开终端限制。
- 也有人强烈偏好终端版 Emacs,因为它无处不在,适合通过 SSH 使用,还能借助
tmux/screen保持会话,并且本地和远程的按键绑定完全一致。 - 有些人干脆把 Emacs 当作自己的终端模拟器(shell/term/vterm 缓冲区)来用,而不是再单独使用一个终端应用。
远程编辑与 TRAMP
- TRAMP 经常被推荐用于避免在远程机器上运行 Emacs,但多位评论者报告了性能问题、卡死,以及与 LSP/eglot 或容器化环境集成时的麻烦。
- 建议的缓解办法包括 SSH control master/持久连接、更短的超时时间,以及在 eshell/dired 中使用 TRAMP 路径;不过,仍有不少人觉得远程的 Emacs-in-tmux 更可靠。
主题、24 位价值与怀疑态度
- 主题作者通常会先针对 24 位 GUI 做设计;映射到 256 色调色板时,像 Solarized 这样的精心设计方案会出现明显劣化。
- 支持 truecolor 的用户认为 256 色调色板设计糟糕且过于有限;怀疑者则质疑细微的颜色差异在实践中是否真有意义,并且不喜欢“马戏团”式的终端配色,更偏好最少的高亮,甚至纯黑白。