VS Code Copilot Chat 复制内容为何丢失 Markdown 格式
在 Visual Studio Code 里和 Copilot Chat 对话时,如果复制出去只能得到纯文本,没有代码块、列表或标题等结构,这通常不是软件故障,而是剪贴板机制的差异导致的。下面把原因与对策梳理清楚。
右键 Copy 与 Ctrl+C 背后的差别
在 Copilot Chat 的单条消息卡片上,官方设计明确区分了两种复制方式:
- 右键菜单 Copy:会把内容以 Markdown 源码形式复制到剪贴板。
- Ctrl+C 快捷键:对于 VS Code 的 Webview 组件,这更像是对选中可视化区域取
innerText,于是复制的是渲染后的文字,丢失了原始 Markdown 语法。
一句话总结这个分歧:右键 Copy 走的是 Copilot Chat 自己的复制通道,把源 Markdown 放进剪贴板;Ctrl+C 走的是通用剪贴板路径,多半只拿到可见文本。
Markdown 本质与目标应用的支持
有时大家说'复制成 Markdown',潜台词是希望保留 ### 标题、- 列表、代码块 等标记。可 Markdown 本质上是纯文本,不是富文本。真正影响体验的是:你复制出去得到的到底是带 Markdown 标记的纯文本,还是渲染后去掉标记的纯文本。
如果你发现右键 Copy 依然不行,可能是以下情况之一:
- 目标应用对 Markdown 没有语法高亮或即时渲染,于是看起来像没格式。
- 当前 VS Code 或 Copilot 版本里,右键 Copy 被某些状态干扰失效。
- 你想要的其实是富文本粘贴(如 RTF 或 HTML 的粗体),那和 Markdown 是两码事。
编辑器设置项与剪贴板多格式
VS Code 的编辑器设置里有一项 Text Editor › Copy With Syntax Highlighting,控制复制时是否把语法高亮以 HTML 或 RTF 一类格式也放到剪贴板。不过这项设置主要影响编辑器文本,不直接管 Webview 里的 Copilot Chat。Chat 属于 Webview,它的复制逻辑是另一个通道,所以你会看到右键 Copy 能拿 Markdown,而 Ctrl+C 拿不到。
官方导出能力与缺口
很多开发者需要把整段对话存档成 Markdown、PDF 或者便于笔记系统使用的格式。官方现在提供的路径是把会话导出为 JSON,再由你自己转成文档。社区里有不少导出为 Markdown 或 PDF 的需求帖子,说明这块仍然是大家痛点。
也因此,社区出现了脚本与扩展,专做 Copilot Chat JSON 到 Markdown 的转换。它们的思路都是:先用命令面板 Chat: Export Chat... 导出 JSON,再本地转 Markdown。
一套可落地的排查与操作顺序
为了尽量复现实用语境,用下面这套顺序来定位问题并拿到你想要的 Markdown:
- 在 Copilot Chat 里,对着你要的那条回答右键 -> Copy,粘贴到 Markdown 编辑器里确认是否保留了诸如
###、-、``` 等标记。这是复制为 Markdown 的通道。 - 如果想复制整段会话,试下在 Chat 视图空白处右键 -> Copy All,或者用命令面板
Chat: Export Chat...导出 JSON。 - 如果你的粘贴目标是 Word、飞书文档、Notion,请留意这些目标对 Markdown 的支持方式不同:能理解 Markdown 的,会直接渲染或提供 Paste and Match Style 入口;不能理解的,会显示成纯文本,这不代表你复制错了,而是目标应用不支持 Markdown 渲染。
- 若你确实需要富文本样式而非 Markdown,那是另一条路线:要么使用能把 Markdown 转 HTML 并以 HTML 形式入剪贴板的扩展,要么贴到支持 Markdown 的文档系统里再导出。VS Code 编辑器侧的 Copy With Syntax Highlighting 只对编辑器生效,Chat 面板并不吃这套。
- 如果你遇到右键 Copy 也只是纯文本,结合版本或平台差异,可能暂时命中已知缺口或回归问题。可以临时走导出 JSON -> 本地转 Markdown 的方案。
提供一套可运行的 Node.js 转换脚本
很多人嫌装扩展麻烦,更偏爱一份脚本在手、随处可跑。下面这段 Node.js 脚本支持把 Chat: Export Chat... 得到的 JSON 文件转成 Markdown。脚本做了容错,兼容不同字段命名,遇到代码片段会用三引号围好,生成一个结构清晰的 Markdown 文件,方便直接存档或提交仓库。


