如何发送多个反引号
How to send multiple backticks
我正在尝试使用 autohotkey 发送多个反引号,但我无法让它始终如一地工作。目标是在编写降价文件时自动创建代码块。所以它应该是这样的:
```
```
然后它应该放在第一行的最后一个反引号后面,以便我可以在那里指定语言。我希望有人能帮助我。
我尝试了以下方法:
!^c:: ; <--- Generate code blocks for markdown files
SendInput, {Raw}`{Raw}`{Raw}`
SendInput, {enter}
SendInput, {enter}
SendInput, {Raw}`{Raw}`{Raw}`
SendInput, {up}
SendInput, {up}
Return
结果:
{Raw}{Raw}
{Raw}{Raw}
!^c:: ; <--- Generate code blocks for markdown files
SendInput, ``````
SendInput, {enter}
SendInput, {enter}
SendInput, ``````
SendInput, {up}
SendInput, {up}
Return
结果:
``
``
!^c:: ; <--- Generate code blocks for markdown files
SendInput, Chr(0x60)Chr(0x60)Chr(0x60)
SendInput, {enter}
SendInput, {enter}
SendInput, Chr(0x60)Chr(0x60)Chr(0x60)
SendInput, {up}
SendInput, {up}
Return
结果:
Chr(0x60)Chr(0x60)Chr(0x60)Chr(0x60)Chr(0x60)Chr(0x60)
我在 Windows 10 上,QWERTZ 键盘设置为德语,如果有帮助的话。
所以,我实际上自己找到了答案,当你使用反引号的 Unicode 表示时它有效:
!^c:: ; <--- Generate code blocks for markdown files
SendInput, {U+0060}{U+0060}{U+0060}
SendInput, {enter}
SendInput, {enter}
SendInput, {U+0060}{U+0060}{U+0060}
SendInput, {up}
SendInput, {up}
Return
可在此处找到更多信息:
很高兴您找到了方法,这里有一些额外的信息供您参考:
首先,问题是,反引号键在您的键盘布局中不存在,因此您在尝试发送它时会出现意想不到的甚至错误的行为正常。
切换到例如英语(美国)键盘布局,您将看到 {`` 3}`n`n{`` 3}{Up 2}
如何正常工作。
这让我想到了另一点,没有必要使用多个发送命令。全部在一行中就可以正常工作,您可以通过将键括在 {}
中并在其后跟一个数字来告诉键重复。
但是,是的,你在 AHK 中用反引号转义,所以这就是不使用关键重复技巧 ````````n`n``````{Up}{Up}
.
的样子
此外,我在这里使用 `n
作为换行符而不是发送输入。对于为什么一个或另一个更好,我没有真正强烈的意见,所以我猜你喜欢哪个就用哪个吧。
也许你可以说 enter 更好,所以无论你在写什么程序都可以决定你使用什么行尾(也许 CR LF 而不是只有 LF)。
然后是关于你尝试使用 {Raw}
的尝试。要使用不同的发送模式,您只需在字符串的开头指定一次,它就会对整个发送命令生效。
阅读 documentation 以获取有关所有不同发送模式的更多详细信息,而不是我在这里输入的内容。
但无论如何,Raw 模式不会在这里为我们做任何有用的事情。它只会使字符 ^+!#{}
按字面解释,而不是作为修饰键 (^+!#
) 或其他特殊键 ({}
).
然后是Chr()
函数的用法。要 运行 一个函数,并在命令上使用它的 return 值,您需要进入表达式模式,即您所在的当前参数(发送命令的唯一参数)。为此,您指定 %
作为参数的第一个字符。所以你的命令看起来像这样:
:SendInput, % Chr(0x60)Chr(0x60)Chr(0x60) "{Enter 2}" Chr(0x60)Chr(0x60)Chr(0x60) "{Up 2}"
然而,这与字面上发送反引号键是一样的,所以我们遇到了我在这个post开头提到的问题。不是一个理想的解决方案。
好的,现在进入您已经找到的解决方案,通过密钥的 unicode 值发送它。
所以这是你最后的漂亮干净的单线:
!^c::SendInput, {U+0060}{U+0060}{U+0060}{Enter 2}{U+0060}{U+0060}{U+0060}{Up 2}
在单行热键中,您甚至不需要以 return
结尾的代码执行,非常好。
但是,不幸的是,关键重复功能在那个 unicode 值块中不起作用。
我正在尝试使用 autohotkey 发送多个反引号,但我无法让它始终如一地工作。目标是在编写降价文件时自动创建代码块。所以它应该是这样的:
```
```
然后它应该放在第一行的最后一个反引号后面,以便我可以在那里指定语言。我希望有人能帮助我。
我尝试了以下方法:
!^c:: ; <--- Generate code blocks for markdown files
SendInput, {Raw}`{Raw}`{Raw}`
SendInput, {enter}
SendInput, {enter}
SendInput, {Raw}`{Raw}`{Raw}`
SendInput, {up}
SendInput, {up}
Return
结果:
{Raw}{Raw}
{Raw}{Raw}
!^c:: ; <--- Generate code blocks for markdown files
SendInput, ``````
SendInput, {enter}
SendInput, {enter}
SendInput, ``````
SendInput, {up}
SendInput, {up}
Return
结果:
``
``
!^c:: ; <--- Generate code blocks for markdown files
SendInput, Chr(0x60)Chr(0x60)Chr(0x60)
SendInput, {enter}
SendInput, {enter}
SendInput, Chr(0x60)Chr(0x60)Chr(0x60)
SendInput, {up}
SendInput, {up}
Return
结果:
Chr(0x60)Chr(0x60)Chr(0x60)Chr(0x60)Chr(0x60)Chr(0x60)
我在 Windows 10 上,QWERTZ 键盘设置为德语,如果有帮助的话。
所以,我实际上自己找到了答案,当你使用反引号的 Unicode 表示时它有效:
!^c:: ; <--- Generate code blocks for markdown files
SendInput, {U+0060}{U+0060}{U+0060}
SendInput, {enter}
SendInput, {enter}
SendInput, {U+0060}{U+0060}{U+0060}
SendInput, {up}
SendInput, {up}
Return
可在此处找到更多信息:
很高兴您找到了方法,这里有一些额外的信息供您参考:
首先,问题是,反引号键在您的键盘布局中不存在,因此您在尝试发送它时会出现意想不到的甚至错误的行为正常。
切换到例如英语(美国)键盘布局,您将看到 {`` 3}`n`n{`` 3}{Up 2}
如何正常工作。
这让我想到了另一点,没有必要使用多个发送命令。全部在一行中就可以正常工作,您可以通过将键括在 {}
中并在其后跟一个数字来告诉键重复。
但是,是的,你在 AHK 中用反引号转义,所以这就是不使用关键重复技巧 ````````n`n``````{Up}{Up}
.
的样子
此外,我在这里使用 `n
作为换行符而不是发送输入。对于为什么一个或另一个更好,我没有真正强烈的意见,所以我猜你喜欢哪个就用哪个吧。
也许你可以说 enter 更好,所以无论你在写什么程序都可以决定你使用什么行尾(也许 CR LF 而不是只有 LF)。
然后是关于你尝试使用 {Raw}
的尝试。要使用不同的发送模式,您只需在字符串的开头指定一次,它就会对整个发送命令生效。
阅读 documentation 以获取有关所有不同发送模式的更多详细信息,而不是我在这里输入的内容。
但无论如何,Raw 模式不会在这里为我们做任何有用的事情。它只会使字符 ^+!#{}
按字面解释,而不是作为修饰键 (^+!#
) 或其他特殊键 ({}
).
然后是Chr()
函数的用法。要 运行 一个函数,并在命令上使用它的 return 值,您需要进入表达式模式,即您所在的当前参数(发送命令的唯一参数)。为此,您指定 %
作为参数的第一个字符。所以你的命令看起来像这样:
:SendInput, % Chr(0x60)Chr(0x60)Chr(0x60) "{Enter 2}" Chr(0x60)Chr(0x60)Chr(0x60) "{Up 2}"
然而,这与字面上发送反引号键是一样的,所以我们遇到了我在这个post开头提到的问题。不是一个理想的解决方案。
好的,现在进入您已经找到的解决方案,通过密钥的 unicode 值发送它。
所以这是你最后的漂亮干净的单线:
!^c::SendInput, {U+0060}{U+0060}{U+0060}{Enter 2}{U+0060}{U+0060}{U+0060}{Up 2}
在单行热键中,您甚至不需要以 return
结尾的代码执行,非常好。
但是,不幸的是,关键重复功能在那个 unicode 值块中不起作用。