全屏渲染
启用更流畅、无闪烁的渲染模式,支持鼠标操作,并在长对话中保持稳定的内存使用。
注意: 全屏渲染是一项可选的研究预览功能,需要 CSC v2.1.89 或更高版本。使用
CLAUDE_CODE_NO_FLICKER=1启用。其行为可能会根据反馈而变化。
全屏渲染是 CSC CLI 的替代渲染路径,可消除闪烁、在长对话中保持内存使用稳定,并添加鼠标支持。它在终端的备用屏幕缓冲区上绘制界面,类似于 vim 或 htop,并且仅渲染当前可见的消息。这减少了每次更新时发送到终端的数据量。
在渲染吞吐量成为瓶颈的终端模拟器中,这种差异最为明显,例如 VS Code 集成终端、tmux 和 iTerm2。如果你的终端滚动位置在 CSC 工作时跳到顶部,或者在工具输出流式传输时屏幕闪烁,此模式可以解决这些问题。
注意: 全屏(fullscreen)一词描述的是 CSC 如何接管终端的绘图表面,就像
vim那样。它与最大化终端窗口无关,在任何窗口大小下都可以工作。
启用全屏渲染
在启动 CSC 时设置 CLAUDE_CODE_NO_FLICKER 环境变量:
CLAUDE_CODE_NO_FLICKER=1 csc
要为每个会话启用它,请在你的 shell 配置文件(如 ~/.zshrc 或 ~/.bashrc)中导出该变量:
export CLAUDE_CODE_NO_FLICKER=1
有何变化
全屏渲染改变了 CLI 绘制到终端的方式。输入框固定在屏幕底部,而不是随着输出流式传输而移动。如果在 CSC 工作时输入框保持不动,说明全屏渲染已激活。只有可见的消息保留在渲染树中,因此无论对话长度如何,内存使用都保持恒定。
由于对话存在于备用屏幕缓冲区而不是终端的原生滚动缓冲区中,一些功能的工作方式有所不同:
| 之前 | 现在 | 详情 |
|---|---|---|
Cmd+f 或 tmux 搜索来查找文本 | Ctrl+o 一次进入转录模式(然后 / 搜索或 [ 写入滚动缓冲区),或 Ctrl+o 两次进入焦点视图(最后的提示 + 工具摘要 + 响应) | 搜索和查看对话 |
| 终端原生的点击拖拽选择和复制 | 应用内选择,鼠标释放时自动复制 | 使用鼠标 |
Cmd-点击打开 URL | 点击 URL | 使用鼠标 |
如果鼠标捕获干扰了你的工作流程,你可以关闭它,同时保留无闪烁渲染。
使用鼠标
全屏渲染捕获鼠标事件并在 CSC 内部处理:
- 点击提示输入框 可将光标定位到所输入文本的任意位置。
- 点击折叠的工具结果 可展开查看完整输出。再次点击可折叠。工具调用及其结果会一起展开。只有有更多内容可显示的消息才是可点击的。
- 点击 URL 或文件路径 可打开它。工具输出中的文件路径,例如 Edit 或 Write 操作后打印的路径,会在默认应用程序中打开。普通的
http://和https://URL 会在浏览器中打开。在大多数终端中,这取代了原生的Cmd-点击或Ctrl-点击,因为鼠标捕获会拦截这些操作。在 VS Code 集成终端和类似的基于 xterm.js 的终端中,请继续使用Cmd-点击。CSC 在那里会交给终端自带的链接处理器,以避免重复打开链接。 - 点击并拖拽 可选择对话中的任意文本。双击选择一个单词,匹配 iTerm2 的单词边界,因此文件路径会作为一个整体被选中。三击选择整行。
- 使用鼠标滚轮滚动 可浏览对话。
选中的文本在鼠标释放时自动复制到剪贴板。要关闭此功能,在 /config 中切换"选择时复制"。关闭后,按 Ctrl+Shift+c 手动复制。在支持 kitty 键盘协议的终端上,如 kitty、WezTerm、Ghostty 和 iTerm2,Cmd+c 也可以使用。如果你有活动的选区,Ctrl+c 会复制而不是取消。
滚动对话
全屏渲染在应用内处理滚动。使用以下快捷键导航:
| 快捷键 | 操作 |
|---|---|
PgUp / PgDn | 向上或向下滚动半屏 |
Ctrl+Home | 跳转到对话开始 |
Ctrl+End | 跳转到最新消息并重新启用自动跟随 |
| 鼠标滚轮 | 逐行滚动 |
在没有专用 PgUp、PgDn、Home 或 End 键的键盘上,如 MacBook 键盘,按住 Fn 加方向键:Fn+↑ 发送 PgUp,Fn+↓ 发送 PgDn,Fn+← 发送 Home,Fn+→ 发送 End。这样 Ctrl+Fn+→ 就是跳到底部的快捷键。如果觉得不方便,可以用鼠标滚轮滚动到底部以恢复跟随,或者将 scroll:bottom 重新绑定到更容易触及的键。
向上滚动会暂停自动跟随,因此新输出不会把你拉回底部。按 Ctrl+End 或滚动到底部可恢复跟随。
这些操作都可以重新绑定。有关操作名称的完整列表,包括没有默认绑定的半页和整页变体,请参阅滚动操作。
鼠标滚轮滚动需要你的终端将鼠标事件转发给 CSC。大多数终端在应用程序请求时都会这样做。iTerm2 将其设为按配置文件的设置:如果滚轮无效但 PgUp 和 PgDn 有效,请打开 Settings → Profiles → Terminal 并启用 Enable mouse reporting。点击展开和文本选择也需要同样的设置。
调整滚轮滚动速度
如果鼠标滚轮滚动感觉缓慢,你的终端可能每个物理档位只发送一个滚动事件,没有倍增器。一些终端,如 Ghostty 和启用了更快滚动的 iTerm2,已经放大了滚轮事件。其他终端,包括 VS Code 集成终端,每个档位只发送一个事件。CSC 无法检测是哪种情况。
设置 CLAUDE_CODE_SCROLL_SPEED 来倍增基础滚动距离:
export CLAUDE_CODE_SCROLL_SPEED=3
值为 3 与 vim 及类似应用的默认值匹配。该设置接受 1 到 20 之间的值。
搜索和查看对话
在全屏渲染中,Ctrl+o 在三种状态之间循环:普通提示、转录模式和焦点视图。按一次进入转录模式,再按一次返回焦点视图,仅显示你最后的提示、工具调用的单行摘要(含编辑差异统计)和最终响应。按第三次返回普通提示屏幕。
转录模式提供 less 风格的导航和搜索:
| 按键 | 操作 |
|---|---|
/ | 打开搜索。输入以查找匹配项,Enter 确认,Esc 取消并恢复滚动位置 |
n / N | 跳转到下一个或上一个匹配项。关闭搜索栏后仍可用 |
j / k 或 ↑ / ↓ | 滚动一行 |
g / G 或 Home / End | 跳转到顶部或底部 |
Ctrl+u / Ctrl+d | 滚动半页 |
Ctrl+b / Ctrl+f 或 Space / b | 滚动整页 |
Ctrl+o | 前进到焦点视图 |
Esc 或 q | 退出转录模式并返回提示 |
你的终端的 Cmd+f 和 tmux 搜索无法看到对话,因为它存在于备用屏幕缓冲区中,而不是原生滚动缓冲区中。要将内容交回终端,先按 Ctrl+o 进入转录模式,然后:
[:将完整对话写入终端的原生滚动缓冲区,所有工具输出都已展开。对话现在是终端中的普通文本,因此Cmd+f、tmux 复制模式和任何其他原生工具都可以搜索或选择它。长会话可能需要暂停片刻。这会持续到你用Esc或q退出转录模式,此时你将返回全屏渲染。下一次Ctrl+o会重新开始。v:将对话写入临时文件并在$VISUAL或$EDITOR中打开。
按 Esc 或 q 返回提示。
配合 tmux 使用
全屏渲染可以在 tmux 内工作,但有两个注意事项。
鼠标滚轮滚动需要 tmux 的鼠标模式。如果你的 ~/.tmux.conf 尚未启用它,请添加以下行并重新加载配置:
set -g mouse on
如果没有鼠标模式,滚轮事件会发送到 tmux 而不是 CSC。使用 PgUp 和 PgDn 的键盘滚动在两种情况下都可以工作。如果 CSC 检测到 tmux 且鼠标模式关闭,会在启动时打印一次性提示。
全屏渲染与 iTerm2 的 tmux 集成模式不兼容,即使用 tmux -CC 进入的模式。在集成模式下,iTerm2 将每个 tmux 窗格渲染为原生分屏,而不是让 tmux 绘制到终端。备用屏幕缓冲区和鼠标跟踪在那里无法正常工作:鼠标滚轮无效,双击可能会损坏终端状态。不要在 tmux -CC 会话中启用全屏渲染。不带 -CC 的 iTerm2 中的常规 tmux 可以正常工作。
保留原生文本选择
鼠标捕获是最常见的摩擦点,尤其是在 SSH 或 tmux 内。当 CSC 捕获鼠标事件时,终端原生的选择即复制功能将停止工作。你通过点击拖拽做出的选择存在于 CSC 内部,而不是终端的选择缓冲区中,因此 tmux 复制模式、Kitty 提示和类似工具无法看到它。
CSC 尝试将选择写入剪贴板,但它使用的路径取决于你的设置。在 tmux 内,它写入 tmux 粘贴缓冲区。通过 SSH,它回退到 OSC 52 转义序列,某些终端默认阻止此序列。CSC 在每次复制后打印一条提示,告诉你它使用了哪个路径。
如果你依赖终端的原生选择,设置 CLAUDE_CODE_DISABLE_MOUSE=1 以退出鼠标捕获,同时保留无闪烁渲染和恒定内存:
CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 csc
禁用鼠标捕获后,使用 PgUp、PgDn、Ctrl+Home 和 Ctrl+End 的键盘滚动仍然有效,终端会原生处理选择。你将失去点击定位光标、点击展开工具输出、URL 点击和 CSC 内的滚轮滚动功能。
研究预览
全屏渲染是一项研究预览功能。它已在常见的终端模拟器上进行了测试,但在不太常见的终端或特殊配置上可能会遇到渲染问题。
如果遇到问题,在 CSC 内运行 /feedback 报告,或在 claude-code GitHub 仓库上提交 issue。请包含你的终端模拟器名称和版本。
要关闭全屏渲染,取消设置环境变量或设置 CLAUDE_CODE_NO_FLICKER=0。