所以,这是我在尝试编写插件时遇到的一个奇怪的情况。对我来说,这看起来像是 Vim 中的一个错误,但我可能会遗漏一些东西,所以我求助于 StackOverflow 的智慧。
采取这个功能:
fun! Test()
normal! q ; Stop recording a macro.
let @r='kkkkkkkkkkkkk'
normal! @r
normal! qm
endf
基本上,我停止录制宏,尝试运行寄存器的内容,然后开始重新录制宏。
我通过点击qm
,执行一些命令,然后调用该函数来调用此函数。
我的期望
我希望执行“kkkkkk”,然后重新开始录制。
怎么了
运行“kkkk”,但没有再次开始录制。
我不明白为什么!
解决方法
以下功能可以满足我的要求,但它是一个 hack。我试图了解我的问题的根本原因:
乐趣!测试()正常!q 让@r='kkkkkkkkkkkkkk' 执行“正常!”。@r 正常!qm endf
我只是用直接执行寄存器内容的执行调用替换了寄存器的运行。基本上,我欺骗 vim 使其不认为它正在运行一个寄存器。
注意:为什么我想要这个
这是一个插件。这个函数只是我能做的最小的一个问题。不值得讨论为什么我想要这个——我需要的基本功能是从一个函数中运行一个寄存器,然后再次开始记录它。在实际用例中,我运行和记录到的寄存器是一样的,但似乎并没有影响这个问题。
那么,有什么想法吗?