vscode终端复制粘贴乱码因ansi转义序列混入文本,需清屏(ctrl+l/cmd+l)、键盘全选(ctrl+home+shift+end)、正则清理\x1b[[0-9;]*m,或用shift+ctrl+alt+v(win/linux)/shift+option+cmd+v(macos)纯文本粘贴。

VSCode 终端复制粘贴带 ANSI 颜色码、多余空格、换行错位,不是“格式保留”,而是原始字节流被当纯文本处理了——关设置没用,得清源头、控路径、选对动作。
终端复制前必须清屏 + 全选键盘操作
鼠标拖选会卡在渲染边界,漏掉刚刷出的行;ANSI 序列(如\x1b[32m)混在文本里,粘贴后变成乱码。这不是 VSCode bug,是终端把控制指令当字符传出来了。
- 复制前先按
Ctrl+L(Windows/Linux)或Cmd+L(macOS)清屏,避免缓冲区残留旧输出干扰 - 按
Ctrl+Home滚到顶部,再按Shift+End全选(macOS 是Cmd+Home+Shift+End) - 别依赖鼠标拖选——尤其长输出时,终端渲染延迟会导致选区断层
粘贴进编辑器后立刻清理 ANSI 转义序列
即使清屏全选,某些 shell(如 zsh with oh-my-zsh)或命令(ls --color=always)仍会输出不可见的转义符。粘贴后直接正则替换最稳。
- 按
Ctrl+H打开替换面板,勾选「使用正则表达式」 - 查找:
\x1b\[[0-9;]*m,替换为空 - 如果还看到
^[[0m这类显式字符,加一条查找\^\[\[[0-9;]*m(需关闭正则,用普通模式)
想原样粘贴终端输出?用纯文本快捷键,别碰 Ctrl+V
VSCode 原生支持绕过所有格式化逻辑的粘贴方式,不依赖插件,也不触发 editor.formatOnPaste 或 editor.autoIndent。
- macOS:
Shift+Option+Cmd+V - Windows/Linux:
Shift+Ctrl+Alt+V - 这个动作跳过语言服务、缩进推导、ANSI 解析,只做字符搬运——适合粘日志、报错、命令行输出
自动化场景别靠复制粘贴,走文件中转
脚本批量跑命令、想把结果直接进编辑器?终端复制有缓冲区上限(默认 1000 行),且无法稳定捕获颜色/换行语义。真要可靠,就得绕开剪贴板。
- 让命令直写临时文件:
npm run build 2>&1 | tee /tmp/build.log - 再用 VSCode 打开:
code /tmp/build.log,或按Ctrl+P输入/tmp/build.log - 若需实时刷新,装扩展
Terminal to Editor,右键终端 →Copy terminal content as HTML,但注意:HTML 粘贴仅在 Typora、Obsidian 等支持渲染的编辑器里有效,普通文本文件里会看到标签源码
真正麻烦的不是怎么清理,而是你以为“复制”这个动作本身是语义完整的——其实它只是从终端缓冲区截了一段字符栅格,连哪行是报错、哪段是路径都分不清。所以关键判断永远在前一步:这输出要不要颜色?要不要换行?要不要进搜索框?答案不同,路径就完全不同。











