![使用 AutoHotkey 将 [ 替换为 { 并将 ] 替换为 }](https://linux22.com/image/1315283/%E4%BD%BF%E7%94%A8%20AutoHotkey%20%E5%B0%86%20%5B%20%E6%9B%BF%E6%8D%A2%E4%B8%BA%20%7B%20%E5%B9%B6%E5%B0%86%20%5D%20%E6%9B%BF%E6%8D%A2%E4%B8%BA%20%7D.png)
我发现在编码时我很少使用方括号[]
,但经常使用花括号{}
。在大多数键盘上,这些是使用Shift+[或Shift+输入的]。
现在我尝试使用 AutoHotkey 重新映射这些键:
[::{{}
基本上添加的{}
是原始模式,但没有用。接下来我尝试了
{[}::{{}
但那也不起作用。
有什么帮助吗?
答案1
使用花括号进行原始密钥解释仅适用于发送命令。因此,要映射[到{和]到,}您可以使用:
[::Send, {{}
]::Send, {}}
笔记:重新映射一个键和它的Shift等效键很麻烦,因为大多数(如果不是所有)键盘都发送相同的扫描码每次,唯一的区别是Shift密钥的引入(它有自己的扫描码)。
例如,按下[键盘上的 发送扫描码01A
并产生[
。按下LShift+[发送扫描码02A
和 01A
,得到{
。
更新:
我有成功地使用一些巧妙的逻辑来克服扫描码问题!使用以下格式,您应该能够切换任何键及其Shift配对。键重复也应该有效。
*$[::
if (GetKeyState("Shift"))
Send, {[}
else
Send, {{}
return
*$]::
if (GetKeyState("Shift"))
Send, {]}
else
Send, {}}
return
扩展这个想法,@鲍勃编写了一个更为强大的脚本版本:
*$[::
if (GetKeyState("Shift"))
SendInput, {[ Down}
else
SendInput, {{ Down}
return
*$]::
if (GetKeyState("Shift"))
SendInput, {] Down}
else
SendInput, {} Down}
return
*$[ Up::
if (GetKeyState("Shift"))
SendInput, {[ Up}
else
SendInput, {{ Up}
return
*$] Up::
if (GetKeyState("Shift"))
SendInput, {] Up}
else
SendInput, {} Up}
return
答案2
如果我遇到这个问题而没有看到上面的答案,我只会按照下面的例子添加几个热字符串。
:*?:[::
SendInput, {Shift Down}`[{Shift up}
return
:*?:]::
SendInput, {Shift Down}`]{Shift Up}
return
:*?:{::
SendInput, `[
return
:*?:}::
SendInput, `]
return
答案3
如果您使用任何带有括号键的快捷方式,第一个答案就是糟糕的解决方案,因为它会破坏它们。快捷方式兼容版本在这里:
$[::Send {{ Down}
$[ Up::Send {{ Up}
+$[::Send {[ Down}
+$[ Up::Send {[ Up}
$]::Send {} Down}
$] Up::Send {} Up}
+$]::Send {] Down}
+$] Up::Send {] Up}
实际上,在编程语言中圆括号的使用频率是花括号的两倍,因此我提供这个版本:
#NoEnv
#NoTrayIcon
#SingleInstance force
#MaxHotkeysPerInterval 200
; Swap [] with ()
[::Send {( Down}
[ Up::Send {( Up}
]::Send {) Down}
] Up::Send {) Up}
+9::Send {[ Down}
+9 Up::Send {[ Up}
+0::Send {] Down}
+0 Up::Send {] Up}
; Swap " with '
$'::Send "
+$'::Send '