我想使用 vim 映射触发 Autohotkey 宏,可以吗?例如,在 vim 中创建一个普通模式 vim 映射以输入CTRL-J,然后使用它来触发 Autohotkey。
在 vim 中:
:nnoremap ,w <ctrl-j>
自动热键
^j:: do something
当我执行此操作时,在键盘上进行物理输入CTRL-J会成功触发 Autohotkey 宏,但 vim 映射不会。
答案1
您可以使用 ImageSearch,因为您知道 VIM 状态栏上显示 INSERT 的坐标,您可以使用 SetTimer 每 200ms 检查一次是否可以找到 INSERT(当然,您必须先捕获/创建图像)。如果可以找到,您可以将切换变量设置为 true 或 false,并且可以将该切换变量与 #If 语句一起使用。
看起来像这样
Toggle:=false
SetTimer, Label, 200
Return
#If Toggle
; hotkeys/hotstrings etc
#If
label:
IfWinNotActive, ahk_exe gvim.exe
{
toggle:=false
return
}
ImageSearch.... ;
If (ErrorLevel = 0) ; image found
{
toggle:=true
return
}
Return
答案2
由于 AutoHotkey 监听实际的键盘事件,并且不知道任何特定应用程序内部发生了什么,并且由于 Vim 的映射在触发时实际上不会发送新的键盘事件,所以不行。您可以创建仅适用于 Vim 的 AutoHotkey 宏:
SetTitleMatchMode, RegEx
#IfWinActive, - G?VIM\d*$
:*?:`,w::
do something
return
#IfWinActive
但是这样做的缺点是无论 Vim 的模式如何都会触发,因为 AutoHotkey 无法知道 Vim 是否处于正常模式。