knowckx
V2EX  ›  OpenAI

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

  •  
  •   knowckx · 13h 38m ago · 456 views

    背景:
    今天正好有时间,研究了一下解决 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 报告:

    #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 本身,它是绕开了有问题的快捷键路径。

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

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

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4319 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:07 · PVG 12:07 · LAX 21:07 · JFK 00:07
    ♥ Do have faith in what you're doing.