用于使 Control+v 在非 CMD 终端(Bash、Putty、WSL...)中工作的 AHK 脚本

问题描述 投票:0回答:2

我想要一个 AHK 脚本,它可以重新映射

Control+v
,以便在非 CMD 终端(如 Bash 和 Putty)中按预期发送剪贴板。

每个终端都有不同的粘贴剪贴板的命令,记住当时应该使用哪个命令总是很烦人。而通常的

Control+C
Control+V
会导致出现一些奇怪的字符(
^[[200~...~
),然后我需要手动删除。


我创建了以下脚本:


#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.

; #Warn  ; Enable warnings to assist with detecting common errors.

SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.

SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#SingleInstance, Force  

SetKeyDelay -1

^v::

sendRaw,% clipboard

return

效果“很好”,但有一些小问题:

当我复制期望紧随其后出现另一个字符的内容时,例如 ` ´ ^ ~,或期望成对出现的字符,例如 " ( [ {,它有一个奇怪的行为,而不是仅仅粘贴我的唯一字符在第一种情况下,我必须粘贴两次才能出现任何内容,然后删除一个重复的字符。在第二种情况下,当应用程序需要关闭时,例如 VScode、Intellij,而不是仅打印我复制的字符,它打印开始和结束字符,然后我必须删除后面的字符。

bash automation autohotkey putty wsl-2
2个回答
0
投票

根据Relax评论

text mode
解决了几乎所有用例...

最后我不得不使用

#IfWinActive
,因为打印屏幕无法与该实现一起使用......

这就是最终的解决方案:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance, Force  
SetKeyDelay -1

#IfWinActive, ahk_exe mintty.exe 
^v::
#IfWinActive, ahk_exe cmd.exe
^v::
#IfWinActive, ahk_exe putty.exe
^v::
  send {Text}%clipboard% 
return


0
投票

在 PuTTY 中,插入热键顺序为 Shift+Insert

我认为如果可以使用 AutoHotKey 拦截 Ctrl+V,并让它发送 Shift+Insert 到 PuTTY 窗口,这应该使 PuTTY 从剪贴板进行粘贴。 (我现在正在亲自尝试验证。)

那些奇怪的字符

^[[200~...~
是Xterm鼠标协议。如果使用鼠标按钮粘贴,您会得到相同的结果。它是一个包含粘贴数据的长转义序列。它要求另一端的程序理解该协议。例如,Vim 就支持它。

PuTTY 并不总是处于此 Xterm 鼠标模式。我发现它以某种方式“意外”进入该模式,并且即使发出正确的转义序列以退出该模式也不会退出该模式。这可能会很麻烦。

我怀疑如果 Vim 处于 Xterm 鼠标模式,无论你如何粘贴,你都会得到那些有趣的字符。也就是说,PuTTY 的粘贴功能就是这样做的,除了关闭 Xterm 鼠标模式之外,可能没有其他办法了。

© www.soinside.com 2019 - 2024. All rights reserved.