gpt4 book ai didi

plugins - Vimscript - 运行正常! qm后运行正常! @米

转载 作者:行者123 更新时间:2023-12-04 05:45:09 26 4
gpt4 key购买 nike

所以,这是我在尝试编写插件时遇到的一个奇怪的情况。对我来说,这看起来像是 Vim 中的一个错误,但我可能遗漏了一些东西,所以我求助于 StackOverflow 的智慧。

拿这个功能:

fun! Test()
normal! q ; Stop recording a macro.
let @r='kkkkkkkkkkkkk'
normal! @r
normal! qm
endf

基本上,我停止录制宏,尝试运行寄存器的内容,然后开始重新录制宏。

我通过点击 qm 来调用这个函数,执行一些命令,然后调用该函数。

我的期望

我希望执行“kkkkkk”,然后重新开始录制。

发生了什么

“kkkk”已运行,但不会再次开始记录。

我不明白为什么!

解决方法

下面的函数做我想要的,但它是一个黑客。我试图了解我的问题的根本原因:

乐趣!测试()
普通的! q
让@r='kkkkkkkkkkkkkk'
执行“正常!”。 @r
普通的!质量
尾端

我只是用直接执行寄存器内容的execute调用替换了寄存器的运行。基本上,我欺骗 vim 使其不认为它正在运行寄存器。

注意:为什么我想要这个

这是一个插件。这个函数只是我能做的最小的函数,它显示了一个问题。不值得深入了解我为什么想要这个 - 我需要的基本功能是从一个函数中运行一个寄存器,然后再次开始记录它。在实际用例中,我运行和记录到的寄存器是相同的,但它似乎没有影响这个问题。

那么,有什么想法吗?

最佳答案

为什么不能将函数调用嵌入到映射中:

function Test()
let @r='kkkkkkkkkkkk'
normal! @r
endfunction
nnoremap Q q:call Test()<CR>qm

?如果“m”实际上是一个非常量值,那么您必须使用 <expr> :
nnoremap <expr> Q "q:call Test()\nq".g:plugin_register

.当然,您可以在 <expr> 中使用函数调用。映射(因此将 normal! @r 移动到函数的输出: return '@r' 因为表达式不允许做 normal! ,缓冲区编辑,切换和移动光标)。

关于plugins - Vimscript - 运行正常! qm后运行正常! @米,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com