AutoHotKey Hotstring不会在Windows的gvim或WSL Ubuntu的vim中触发

时间:2019-07-09 20:52:00

标签: windows vim autohotkey

我使用AHK将]dd之类的字符串自动转换为当前日期(请参见下面的代码)。在大多数Windows文本编辑器/区域中使用此功能时,它可以正常工作。但是,当我在Windows上使用gvim用于Windows或在WSL上的Ubuntu中使用vim时,我通常不得不键入一个“启动”字符或尝试几次hotstring使其起作用。在论坛上搜索没有返回关于此特定问题的任何点击。

#NoEnv  ; Recommended for performance and compatibility with future 

AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

; This allows me to quickly enter date and time stamps.
::]dd::
FormatTime, TimeString, , yyMMdd ; LongDate
Send, %TimeString%
Return

:*:]t::
FormatTime, TimeString, , HHmm
Send, %TimeString%
Return

:*:]dt::
FormatTime, TimeString, , yyMMdd HHmm
Send, %TimeString%
Return

在我使用过的记事本或其他无模式文本编辑器/区域中,这些工作几乎完美无缺,但是我真的很喜欢vim。

我猜AHK是在键入空格字符而不是CR / LF,因此在vim模式编辑器(包括使用IdeaVim插件的PyCharm之类)中进入insert模式并按{{ 1}}并没有让AHK知道开始寻找muh hawtstrangs。我必须打Enter,有时还要打几次,才能使热字符串被识别。

我想我可以只创建热键,但是我在macOS上的Keyboard Maestro中使用这种方法,并在* NIXes中使用了键盘设置,因此我很重视肌肉记忆。

我是否忽略了某个配置,或者这只是边缘情况?

1 个答案:

答案 0 :(得分:1)

要使其在Vim中可靠且一致地工作,请在hotstring选项中同时包含问号和星号(:*?:...),而不仅仅是星号或空选项。这种解决方法仅对Windows上的Vim有用。否则,Autohotkey首次进入插入模式时将不会扩展。

因此,它可能看起来像:

...

:*?:]dd::
FormatTime, TimeString, , yyMMdd ; LongDate
Send, %TimeString%
Return

:*?:]t::
FormatTime, TimeString, , HHmm
Send, %TimeString%
Return

:*?:]dt::
FormatTime, TimeString, , yyMMdd HHmm
Send, %TimeString%
Return

但是,这将稍微改变行为,因为它将触发单词中的热字符串,因此Hello]dd将触发]dd。但是我可以忍受这一点,并且避免总是检查它是否触发了热字符串的麻烦。

或者,为了完全匹配初始行为,我将使用UltiSnips插件在vim中重新创建文本扩展,但这会比必要的工作多一些。