vim 映射可以触发 Autohotkey 宏吗?

vim 映射可以触发 Autohotkey 宏吗?

我想使用 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 是否处于正常模式。

相关内容