使用 AutoHotkey 将 [ 替换为 { 并将 ] 替换为 }

使用 AutoHotkey 将 [ 替换为 { 并将 ] 替换为 }

我发现在编码时我很少使用方括号[],但经常使用花括号{}。在大多数键盘上,这些是使用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 '

相关内容