Claude Code 推出 NO_FLICKER 模式:终端里的全新渲染体验
·4 分钟阅读
概述
Claude Code 的创造者 Boris Cherny(@bcherny)今天在 X 上宣布了一个新的实验性功能——NO_FLICKER 模式。这是一个全新的终端渲染器,通过虚拟化整个视口来解决长期困扰用户的终端闪烁问题。
启用方式很简单:
CLAUDE_CODE_NO_FLICKER=1 claude

(左边是普通模式,右边是全屏渲染模式)
为什么终端会闪烁
在深入了解新模式之前,先理解一下问题的根源。
终端的渲染基于 ANSI 转义码——一套相当受限的指令集。Boris 形容这"有点像写汇编":有用来移动光标到 (x, y) 的指令,有用来输出文本的指令,但没有用来"移动光标到 (x, -y) 以重绘视口之外的行"的指令。
这意味着,当需要更新已经滚出屏幕的内容时,唯一的选择就是"清除整个屏幕再重绘"——这就是闪烁的来源。随着对话越来越长,这个问题会越来越明显。
NO_FLICKER 模式的工作原理
新渲染器的核心思路是虚拟化整个视口:
- 接管渲染控制权:将渲染控制从终端层移到应用层
- Hook 键盘和鼠标事件:自行处理滚动等交互
- 虚拟化视口:只渲染当前可见区域,避免"清屏重绘"
这个方案在终端渲染器的限制内找到了一种更优雅的方式,同时提供了更丰富和更高性能的用户体验。
带来的改进
- 不再闪烁——最核心的改进
- 不再跳动——滚动位置稳定
- 恒定的内存和 CPU 占用——不会随对话增长而膨胀
- 鼠标支持——可以在输入框内点击移动光标,部分 UI 元素也可点击
- 更好的选择行为——选中代码时不再包含行号和 UI 元素
下面是实际使用中的效果演示:
需要注意的 Trade-offs
这种方案并非没有代价。由于虚拟化了整个视口,一些原生终端行为需要替代方案:
| 原生功能 | NO_FLICKER 中的替代方案 |
|---|---|
Cmd+F 搜索 | Ctrl+O 然后 / 搜索记录(或 Ctrl+R 反向搜索) |
| 原生复制粘贴 | 选中时自动复制到剪贴板(可在 settings.json 中改为 Ctrl+C) |
另外,滚动手感在不同设备上还存在差异,Claude Code 团队正在调优物理参数以适配更多终端。
我的看法
作为一个每天在终端里使用 Claude Code 的人,闪烁确实是一个烦人的体验问题,尤其在长对话中。NO_FLICKER 模式的思路很有意思——与其在终端渲染器的限制内打补丁,不如直接接管整个视口的控制权。这本质上是把终端当成了一个画布,在上面实现了一个自定义的 UI 框架。
当然,代价是失去了一些终端原生的交互习惯。如果你重度依赖 Cmd+F (我几乎没用过😂)或者习惯了原生的复制粘贴,切换过来需要适应一下。
推荐大家试试看,毕竟只需要加一个环境变量就能体验。