跳到主要内容
ansicode

OSC 52 — 系统剪贴板读写

通过终端设置(或查询)宿主系统剪贴板 —— 可跨 SSH 工作,无需 X11 转发。

字节形式

涵盖所有常见的字符串字面量写法,方便正反查找。

\\x1b[\x1b]52;c;BASE64\x07 (set clipboard 'c' to BASE64 decoded bytes)
\\033[\033]52;c;BASE64\007
\\e[\e]52;c;BASE64\a
ESC [ESC ] 52 ; SELECTION ; PAYLOAD BEL
hex1b 5d 35 32 3b ... 07

说明

通过终端输出来设置系统剪贴板。第一个参数为选择区:c = CLIPBOARD、p = PRIMARY、s = secondary、q0..9 为剪切缓冲区。第二个参数为 base64 编码的字节;若改写为字面 ?,终端会回报当前剪贴板内容(\x1b]52;c;BASE64\x07)。tmux set -g set-clipboard onvimclipboard=unnamedplus,osc52)、neovimvim.g.clipboard)以及 yazi --copy 都依靠此机制在 SSH 下完成跨主机复制。出于安全考虑(恶意日志行可改写剪贴板)大多数终端默认禁用,需要在终端设置中显式开启。

规范出处: xterm-ctlseqs (OSC 52)

示例

bash
printf '\033]52;c;%s\007' "$(printf 'hello' | base64)"
python
import sys, base64\npayload = base64.b64encode(b'hello').decode()\nsys.stdout.write(f'\x1b]52;c;{payload}\x07')
go
import "encoding/base64"\nfmt.Printf("\x1b]52;c;%s\x07", base64.StdEncoding.EncodeToString([]byte("hello")))
javascript
process.stdout.write('\x1b]52;c;' + Buffer.from('hello').toString('base64') + '\x07')
c
/* assumes base64_encode() helper */\nprintf("\x1b]52;c;%s\x07", base64_encode("hello", 5));

在哪里用到

实际会发出该序列的工具——把抽象字节锚定到你已经用过的命令上。

  • tmux`set -g set-clipboard on`——复制模式选区通过 OSC 52 写入,让远端 ssh 主机的剪贴板也能收到
  • neovim内置 `osc52` provider 让远端无需 xclip 即可使用 `"+y`
  • vim with vim-oscyank plugin添加 `:OSCYank` 命令,让 yank 通过 ssh / tmux 抵达主机剪贴板
  • kitty `kitten clipboard` and `kitty +kitten icat` helpers
  • lazygit — `y` to copy commit SHA via OSC 52 in supporting terminals

常见问题

针对这条序列,开发者真正会去搜索的问题的简短回答。

OSC 52 剪贴板写入有字节上限吗?
规范没硬上限,但终端与多路复用器都在 KB 级别上有实际限制——「OSC 52 是小载荷机制,不是二进制传输通道」是正确的心智模型。tmux 在转发到外层终端之前会先把超出内部缓冲限制的载荷截断;iTerm2 给 OSC 52 设了上限,并把该功能放到 *Settings → General → Selection → Allow clipboard access* 后面(新安装默认关闭)。vim 的 clipboard=osc52 与 neovim 内建的 OSC 52 提供者在载荷过大时都会告警。把大粘贴分块,或对文件改用专用传输(SCP、URL 粘贴)。

终端支持

xterm
支持
Linux console (fbcon)
不支持
macOS Terminal.app
不支持
iTerm2
支持
Windows Terminal
部分
cmd.exe / ConPTY
不支持
kitty
支持
alacritty
支持
WezTerm
支持
Ghostty
支持
GNOME Terminal
部分
Konsole
支持
tmux
部分
GNU screen
不支持

相关序列