Codex 按 Ctrl+Shift+V 粘贴两次?用 AutoHotkey 解决

knowckx 2026-09-03 22:29 1


背景:

今天正好有时间,研究了一下解决 Codex 目前Ctrl+Shift+V会粘贴两次的问题,提出自己的解决方案并验证成功了。

我把整个 Debug 过程和相关信息记录了下来,希望对你们也有帮助。

文章首发在个人 Blog ,文章的部分内容有 AI 润色。



长话短说


最近我在用 Codex Desktop 时,碰到了一个挺烦人的问题:



  • Ctrl+V:正常粘贴一次

  • Ctrl+Shift+V:同一段内容连续粘贴两次


如果你的现象完全一样,那基本可以判断是 Codex Desktop 自己的快捷键和粘贴处理出了问题。


我研究了一下,觉得目前最实用的解决方案,是直接用 AutoHotkey 接管 Ctrl+Shift+V



Ctrl+Shift+V → AHK 截获 → 剪贴板转为纯文本 → 等待按键松开 → 模拟一次 Ctrl+V → 恢复原剪贴板



这样既能真正去掉 HTML 、字体、颜色等富文本格式,也能绕开 Codex 那条有问题的 Ctrl+Shift+V 处理路径。


事情背景


先做一个很简单的测试,在 Codex 聊天输入框里分别粘贴同一段带格式的文本:


Ctrl+V          → 正常一次
Ctrl+Shift+V → 重复两次

如果只有第二种方式重复,基本就对上了。


这个问题并不是个例。openai/codex 仓库中至少有两份相同的 Windows 报告:



  • #26199:Windows 版纯文本粘贴会插入两次,提交于 2026-06-03 ,目前仍是 Open 。

  • #27161:Windows 10 下 Ctrl+Shift+V 粘贴两次,提交于 2026-06-09 。


#27161 虽然已经关闭,但在 2026-09-03 仍有人使用 Codex Desktop 26.831.2377.0 复现。所以至少在我写这篇文章时,这个问题还没有真正消失。


为什么会重复粘贴


#27161 的描述看,Codex 设置里还把 Ctrl+Shift+V 分配给了“启动或停止语音模式”。一个快捷键同时牵涉语音和粘贴,很容易发生事件冲突。


具体是哪一层处理了两次,官方目前没有给出清晰说明。不过对我们来说,先解决使用问题更重要。


思路也很直接:不要再让 Codex 自己处理 Ctrl+Shift+V


用 AutoHotkey 绕开 Codex 的粘贴逻辑


AutoHotkey 是 Windows 上很经典的自动化工具,可以改快捷键、运行程序、自动输入,也可以做一些简单的桌面自动化。


如果你平时喜欢折腾电脑,我很推荐装一下。它占用资源很小,能解决的琐碎问题却很多。


这次我们只让它做五件事:



  1. 仅在 Codex Desktop 窗口激活时接管 Ctrl+Shift+V

  2. 保存包含图片和富文本格式在内的完整剪贴板。

  3. 把当前剪贴板重新写成纯文本。

  4. KeyWait 等待你真正松开 CtrlShift,再发送一次 Ctrl+V

  5. 粘贴完成后恢复原剪贴板。


完整脚本和代码说明


下面使用的是 AutoHotkey v2 语法。安装时不要选旧的 v1 ,否则脚本无法直接运行。


; ==================== 解决 GPT control + shift + v 粘贴两次 ====================

; 只在 Codex Desktop 对应的 ChatGPT.exe 窗口中启用热键
#HotIf WinActive("ahk_exe ChatGPT.exe")

; $ 防止脚本发送的按键再次触发本热键
$^+v::{
; 保存完整剪贴板,后面还会原样恢复
saved := ClipboardAll()

; 将剪贴板重新赋值给自己,去掉 HTML 、字体和颜色等格式
A_Clipboard := A_Clipboard

; 等物理按键真正松开,不主动发送 {Ctrl up}{Shift up}
KeyWait("Ctrl")
KeyWait("Shift")

; 绕开 Codex 的 Ctrl+Shift+V ,只发送一次普通 Ctrl+V
Send("^v")

; 给一个很短的反馈,确认脚本已经接管本次粘贴
ToolTip("纯文本粘贴")
SetTimer(() => ToolTip(), -700)

; 留出时间让目标程序读取文本,然后恢复原剪贴板
Sleep(100)
A_Clipboard := saved
}

; 结束窗口范围限制,避免影响后面的其他热键
#HotIf

这里最关键的是这一行:


A_Clipboard := A_Clipboard

它会保留剪贴板里的文字,但去掉 HTML 、字体、颜色等额外格式。这才是实际意义上的“粘贴为纯文本”。


这里还有一个我当时实际遇到的坑。


触发 $^+v 的那一刻,物理键盘上的 CtrlShift 通常还处于按下状态。如果这时立刻让 AHK 模拟 Ctrl+V,输入法可能会把尚未松开的修饰键和新按下的 V 组合起来,识别成一次输入法切换操作


最直觉的处理方式,是先执行 Send("{Ctrl up}{Shift up}"),强行告诉系统这两个键已经抬起。但这种做法会主动修改修饰键状态,反而更容易和输入法、其他快捷键产生副作用。


我最后采用的方案更稳:不伪造按键抬起,而是等你真的松开 CtrlShift 后再粘贴。


另外两行 KeyWait 也不能省。它们会暂停脚本,直到你真正松开对应按键,再继续执行 Send("^v")。这样既避免了物理修饰键叠加,也不会像 Send("{Ctrl up}{Shift up}") 那样强行干预键盘状态。


创建并运行 Control.ahk



  1. 从 AutoHotkey 官网 下载并安装 v2 。

  2. 找一个长期不会删除的位置,新建文件 Control.ahk

  3. 用记事本或代码编辑器打开,把上面的代码完整粘贴进去并保存。

  4. 双击 Control.ahk 运行脚本。

  5. 回到 Codex Desktop ,按一次 Ctrl+Shift+V 测试。


成功后,系统托盘会出现 AutoHotkey 图标,每次粘贴时还会短暂显示“纯文本粘贴”。


注意文件名一定要以 .ahk 结尾,不要保存成 Control.ahk.txt


设置开机自动启动


每次手动运行还是有点麻烦,直接放进 Windows 启动目录更省事:



  1. 右键 Control.ahk,创建一个快捷方式。

  2. Win+R 打开“运行”。

  3. 输入 shell:startup 并回车。

  4. 把刚才创建的脚本快捷方式放进这个文件夹。


链路就是:



Windows 启动 → 自动运行快捷方式 → 加载 Control.ahk → 接管 Codex 的 Ctrl+Shift+V



使用效果和注意事项


这份脚本只对进程名为 ChatGPT.exe 的窗口生效,不会修改其他软件的 Ctrl+Shift+V


如果脚本运行后完全没有反应,可以先在任务管理器里确认 Codex Desktop 的进程名。如果后续版本更改了进程名,就需要同步修改 ahk_exe ChatGPT.exe


另外,脚本会在粘贴后等待 100ms 再恢复剪贴板。普通文字通常够用;如果粘贴特别长的日志时偶尔出现内容不完整,可以把它提高到 300500


最后


这个方案没有修复 Codex 本身,它是绕开了有问题的快捷键路径。


但从实际使用角度看,它已经把问题解决得很干净:按键习惯不用改,粘贴只执行一次,还顺便获得了真正的纯文本粘贴。


在官方彻底解决之前,我会继续用这套方案。简单、稳定,也不需要为了粘贴一段文字反复删掉重复内容。

最新回复 (0)
    没有回复
* 帖子来源V2EX
返回