我使用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中使用了键盘设置,因此我很重视肌肉记忆。
我是否忽略了某个配置,或者这只是边缘情况?
答案 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中重新创建文本扩展,但这会比必要的工作多一些。