寻求适配非CMD终端的Control+v粘贴AHK脚本解决字符异常问题
跨终端/编辑器的AHK智能粘贴脚本
问题背景
不同终端(Bash、Putty等非CMD环境)用原生Ctrl+V粘贴会出现^[[200~...~乱码;同时在VSCode、Intellij等编辑器中,粘贴单个成对字符(" ( [ {)会触发自动补全,粘贴`´ ^ ~ ``这类特殊字符时会出现重复内容,需手动修正。
解决方案脚本
; 重写Ctrl+V为智能粘贴逻辑 ^v:: WinGet, activeProcess, ProcessName, A ; 定义目标终端进程列表(按需扩展) terminalProcesses := ["putty.exe", "WindowsTerminal.exe", "bash.exe", "wsl.exe", "ubuntu.exe"] isTerminal := false for _, proc in terminalProcesses { if (activeProcess = proc) { isTerminal := true break } } ; 定义目标编辑器进程列表(按需扩展) editorProcesses := ["code.exe", "idea64.exe", "phpstorm64.exe"] isEditor := false for _, proc in editorProcesses { if (activeProcess = proc) { isEditor := true break } } if (isTerminal) { ; 终端用Shift+Insert标准粘贴,规避乱码 Send +{Insert} } else if (isEditor) { clipContent := Clipboard ; 处理单个成对开字符(解决编辑器自动补全冗余闭合) pairOpenChars := {"\""": true, "(": true, "[": true, "{": true} if (StrLen(clipContent) = 1 && pairOpenChars.HasKey(clipContent)) { Send ^v Sleep 30 ; 等待编辑器补全操作完成 Send {Backspace} } ; 处理特殊触发型单字符(避免重复粘贴) specialChars := {"``": true, "´": true, "^": true, "~": true} else if (specialChars.HasKey(clipContent)) { SendInput % clipContent } else { ; 其他内容正常粘贴 Send ^v } } else { ; 非终端/编辑器窗口保留默认Ctrl+V行为 Send ^v } return
核心逻辑说明
- 终端适配:放弃终端兼容性差的
Ctrl+V,改用所有终端通用的Shift+Insert粘贴,彻底解决乱码问题。 - 编辑器成对字符修正:检测到剪贴板是单个
" ( [ {时,粘贴后自动删除编辑器补全的闭合字符,省去手动删除步骤。 - 特殊字符处理:直接发送`´ ^ ~ ``这类特殊字符,跳过默认粘贴流程,避免重复内容。
- 可扩展性:根据自己常用软件,修改
terminalProcesses和editorProcesses数组添加对应进程名即可。
注意事项
- 脚本运行需依赖AutoHotkey v1.x版本。
- 编辑器补全延迟
Sleep 30可根据电脑性能调整数值,确保补全完成后再执行退格。 - 若有其他特殊字符或软件需要适配,直接扩展对应数组即可。
内容的提问来源于stack exchange,提问作者Vinícius Matos
相关产品推荐
相关产品推荐

