代理刚把任务做完,交回来三个文件。接下来你要把这些内容搬进编辑器:用鼠标在终端里划选,界面一重绘选区就没了,按 Ctrl+C 还把转圈动画那一行一起复制进去。/copy 就是用来跳过这一整套动作的。
它有三个几乎没人用的行为:代码块选择器、直接写入文件的按键,以及终端处在 SSH 或 tmux 里时按顺序尝试的三条剪贴板路径。下面给出命令、原样的输出,以及什么都没粘上时该怎么办。
/copy 命令做什么?
它把某一条代理回复的文本复制到剪贴板,同时把同一份文本写入一个临时文件。如果这条回复里有代码块,它会先打开选择器再复制。
这不是屏幕抓取。命令读取的是会话里已经保存的消息,直接写入完整文本,所以缩进、表格和代码围栏都能原样保留。
| 你要复制什么 | 输入什么 |
|---|---|
| 最新一条回复 | /copy |
| 上一条回复 | /copy 2 |
| 某一个代码块 | /copy 然后在选择器里选 |
如何复制最新一条回复?
单独输入命令并确认。不带参数时,目标是代理最近写下的一条消息。
/copy
确认信息分两行,给出复制内容的计数和文件路径:
Copied to clipboard (1428 characters, 37 lines)
Also written to /tmp/claude/response.md
用计数做一次快速核对。如果行数比屏幕上看到的少很多,说明你复制的是另一条回复,或者只复制到了片段。
如何复制更早的一条回复?
传入位置,从后往前数:1 是最后一条,2 是倒数第二条。
/copy 2
计数只看有文本的代理消息。只调用了工具、没有文字的那一轮,以及 API 报错消息,都不计入。所以 /copy 3 是第三条真正的回复,不是日志里的第三行。
最多可以回溯 20 条回复。要超过实际数量时,它会把可用数量告诉你,而不是复制错的东西:
Only 3 assistant messages available to copy
如果参数不是正整数,则返回用法提示:
Usage: /copy [N] where N is 1 (latest), 2, 3, … Got: abc
如何只复制一个代码块?
在至少包含一个带围栏代码块的回复上运行 /copy。它不会整段复制,而是打开 Select content to copy: 选择器,每个块对应一个条目。
| 选择器条目 | 复制什么 |
|---|---|
Full response | 整条回复。旁边显示字符数和行数。 |
| 代码块首行 | 只复制那个块。标题是首行截取到 60 个字符,描述里带语言,块超过一行时还带行数。 |
Always copy full response | 整条回复,并且以后不再弹出选择器。 |
如果回复里没有代码块,选择器不会出现,命令直接复制整条回复。这就是 /copy 有时让你选、有时不让你选的原因。
选择器里的 w 键有什么用?
把选中的条目写入文件,不碰剪贴板。对于标注为 py 的块,确认信息是 Written to /tmp/claude/copy.py。
| 按键 | 动作 | 屏幕上出现 |
|---|---|---|
enter | 复制并写入文件 | Copied to clipboard (...) |
w | 只写入文件 | Written to ... |
esc | 取消,不复制 | Copy cancelled |
这就是"我现在就要粘贴"和"我要文件落到磁盘上"的区别。如果你剪贴板里已经有重要内容,w 不会把它覆盖掉。
/copy 写入的文件在哪里?
在系统的临时目录里,位于一个名为 claude 的文件夹下,这是沿用下来的名字,目前依然有效。Linux 上是 /tmp/claude/,macOS 上在 $TMPDIR 里。
- 整条回复:
response.md。 - 代码块:
copy.加上围栏里写的语言名,只保留字母和数字。py围栏得到copy.py;typescript围栏得到copy.typescript。 - 没有标注语言、或标注为
plaintext的块:copy.txt。
确切路径会打印在确认信息里,不用去猜。由于是临时目录,系统过一段时间可能清理掉这个文件:内容重要就把它移到项目里。
/copy 的路径。两种情况下临时文件都会写入,包括剪贴板失败时。为什么 /copy 什么都没粘上?
因为剪贴板并不属于终端协议的一部分。命令不会自己去写系统剪贴板,它会按顺序尝试最多三条路径,而每一条都取决于你的环境。
| 路径 | 何时使用 | 预期结果 |
|---|---|---|
原生工具:macOS 的 pbcopy,Linux 的 wl-copy、xclip 或 xsel | 本地会话,没有 SSH_CONNECTION | 最可靠的一条路 |
tmux 缓冲区:tmux load-buffer -w -,终端是 iTerm2 时用 load-buffer - | 在 tmux 里 | 用 tmux 前缀可以粘贴;能否到达系统取决于 set-clipboard |
| OSC 52,总是作为最后一次尝试发出 | 其余所有情况,包括 SSH | 终端必须接受该序列。失败时没有提示 |
绝大多数"粘不上"来自两种情况:
- tmux 没有转发。 在 tmux 里,OSC 52 序列会被包进一个 DCS 数据包。tmux 3.3 及以后只有打开
allow-passthrough才会转发,而这个选项默认关闭。没有它,tmux 会悄无声息地丢掉整个包:屏幕上没有任何报错。 - 终端忽略 OSC 52。 有些模拟器收到序列后默认什么也不做,其中最出名的是 iTerm2。
tmux 的调整就是 ~/.tmux.conf 里的一行:
set -g allow-passthrough on
然后用 tmux source-file ~/.tmux.conf 重新加载,再试一次。纯 SSH、没有 tmux 的情况下,唯一的路是 OSC 52,加上你这一侧终端的授权。
如果粘贴就是不成,最短的路是干脆不依赖它。文件已经在磁盘上了:
cat /tmp/claude/response.md
坑:选择器只列顶层代码块。 提取是在回复的顶层遍历的,所以嵌在列表、引用或编号条目里的代码块可能根本不会变成选项。如果正确的块不在列表里,就选 Full response,再到编辑器里裁剪。
如何让 /copy 总是复制整条回复?
两种方式,写入的是同一个全局偏好。在选择器里选 Always copy full response,确认信息以 Preference saved. Use /config to change copyFullResponse 结尾。或者打开 /config,把 copyFullResponse 改成 true。
打开这个偏好后,选择器不再出现,/copy 直接复制整条回复。想恢复选择器,把同一个键改回 false。
用鼠标选择不能解决同样的问题吗?
只能解决一部分。在全屏模式下,鼠标松开就已经完成复制,这个行为由 copyOnSelect 控制,默认开启。/copy 补的是鼠标选择不擅长的部分:不用瞄准就取整个块、取上一条回复,以及在非全屏下也能用。
| 方式 | 适合 | 限制 |
|---|---|---|
| 鼠标选择 | 全屏下任何可见片段 | 需要瞄准;界面重绘会打断 |
/copy | 最新回复、整个代码块、上一条回复 | 只限代理消息文本 |
/export | 把整段对话导出成文件 | 是整场会话,不是片段 |
复制结果是简单的那一半。真正贵的是:想同一个代码块来第三版时,不用先看一眼计数器再按回车。在 Verboo Code 里,终端是同一个,/copy 也是同一个,token 不计入月度用量:你粘贴、测试,然后再要一次。



