Skip to content

2.1b 如何复制内容

💡 新手第一问:"为什么我按 Ctrl+C 程序就退出了?!"

📝 课程笔记

本课核心知识点整理:

复制操作学霸笔记

学完你能做什么

  • 理解为什么不能用 Ctrl+C 复制
  • 掌握鼠标选中即复制的"黑科技"
  • 学会一键复制 AI 的长回复
  • 解决 Windows 终端选不中文字的问题

💥 为什么 Ctrl+C 不管用?

对于习惯了 Word 和浏览器的用户来说,这可能是最大的文化冲击。

在终端(OpenCode 运行的黑框框)的世界里,Ctrl+C 通常被用作中断信号,而不是复制快捷键。

  • 在 Word 里Ctrl+C = 📷 拍照(复制内容)
  • 在终端里Ctrl+C = 🛑 中断

因此,在 OpenCode 里按 Ctrl+C 并不能复制选中的内容。


🚀 方法一:鼠标流(最直觉)

这是 OpenCode 专门为现代用户设计的"隐藏技能",Win 和 Mac 通用

操作步骤

  1. 按下鼠标左键,拖动选择你想复制的文字。
  2. 松开鼠标左键
  3. 完成! 🎉

是的,你没看错。你不需要按右键,也不需要按任何键。在你松开鼠标的一瞬间,OpenCode 会自动把选中的内容复制到剪贴板,并提示 Copied to clipboard


⌨️ 方法二:键盘流(最快)

当你只想要 AI 刚才说的那段话(比如一大段代码),用鼠标拖太累了。

操作步骤

  1. 按下 Leader 键(默认是 Ctrl+X)。
  2. 松开所有键。
  3. 按下 Y

记忆口诀Y = Yank(这是程序员圈子里"复制"的黑话)。

想要更多快捷键?请查看 2.3 常用快捷键推荐


📜 方法三:命令流(最全)

当你想把整个对话记录(你说的话 + AI 说的话)都保存下来,发给朋友或者存到文档里。

操作步骤

  1. 在输入框输入 /copy
  2. Enter 回车。

整个对话历史就会被完整复制。


🛡️ 保底大招:强制系统复制

如果上面的"黑科技"不管用,或者你就是想用系统原生的方式复制。

系统操作
Mac按住 Option (⌥) + 鼠标拖选 → Command+C
Windows按住 Shift + 鼠标拖选 → 右键Enter

使用场景

  • OpenCode 卡死没反应时
  • 想要精确复制报错信息时
  • 终端窗口被其他程序劫持时

跟我做

第 1 步:体验 Ctrl+C

  1. 在输入框随便打几个字(不要发出去)。
  2. Ctrl+C
  3. 看到输入框被清空了吗?因为 Ctrl+C 被识别为了中断信号。

第 2 步:体验"自动复制"

  1. 让 AI 随便说句话(比如输入 hi)。
  2. 用鼠标选中 AI 回复的几个字。
  3. 松开鼠标
  4. 找个记事本,按 Ctrl+V 粘贴。
  5. 成功了吗?

第 3 步:体验"强制复制"

  1. 回到 OpenCode。
  2. Mac 用户:按住 OptionWindows 用户:按住 Shift
  3. 用鼠标拖选一段文字。
  4. 这种方式绕过了 OpenCode,直接使用了终端系统的选择功能。

🚑 故障排查:屏幕出现乱码怎么办?

现象:如果你是 Windows 用户,在按了 Ctrl+C 退出后,可能会发现动动鼠标屏幕上就会出现一堆类似 [555;38;16M 的乱码。

原因

  • OpenCode 启动时开启了"鼠标监听模式"。
  • Ctrl+C 在 Windows 上是一种暴力强制退出的信号(SIGINT)。
  • 导致 OpenCode 还没来得及告诉终端"关闭鼠标监听",程序就被杀死了。
  • 终端以为你还在程序里,拼命把鼠标坐标发给屏幕,就变成了乱码。

🐛 已知问题:截止到 OpenCode v1.1.25 版本,此问题在 Windows 上尚未完全修复。这属于底层技术限制,建议按照下方表格操作。

解决方法

  1. 急救:直接关闭当前终端窗口,重新打开。
  2. 预防(强烈推荐):不要用 Ctrl+C 退出程序!请使用 Ctrl+D
退出方式性质结果
Ctrl+C🔪 硬杀 (Force Kill)容易导致鼠标乱码,不推荐
Ctrl+D👋 告别 (Soft Exit)优雅退出,自动清理,推荐

提示Ctrl+D 会触发 OpenCode 的清理逻辑,确保鼠标模式被正确关闭。


📚 延伸阅读


下一课预告

下一课我们学习 管理对话

你会学到:

  • 如何新建、切换、重命名会话
  • 如何撤销不满意的回复
  • 如何导出聊天记录

附录:源码参考

点击展开查看源码位置

更新时间:2026-01-18

OpenCode 的"鼠标松开即复制"逻辑并非终端默认行为,而是写在代码里的高级特性:

功能文件路径关键逻辑
鼠标复制逻辑src/cli/cmd/tui/app.tsxonMouseUp 事件监听
剪贴板工具src/cli/cmd/tui/util/clipboard.ts跨平台剪贴板支持

核心代码片段 (app.tsx)

typescript
// 当鼠标松开时
onMouseUp={async () => {
  // 1. 获取选中的文本
  const text = renderer.getSelection()?.getSelectedText()
  if (text && text.length > 0) {
    // 2. 调用剪贴板 API 复制
    await Clipboard.copy(text)
    // 3. 提示用户
    toast.show({ message: "Copied to clipboard" })
    // 4. 清除选中状态
    renderer.clearSelection()
  }
}}
本站教程完全免费,广告收入用于覆盖服务器成本。感谢您的支持!