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

标签 plugins editor vim

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

使用这个函数:

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

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

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

我的期望

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

发生了什么

“kkkk”已运行,但录制再次开始。

我不明白为什么!

解决方法

以下函数可以实现我想要的功能,但它是一个 hack。我试图了解问题的根本原因:

有趣!测试() 普通的! q 让@r='kkkkkkkkkkkkk' 执行“正常!”。 @r 普通的!质量 结束

我刚刚用直接执行寄存器内容的执行调用替换了寄存器的运行。基本上,我欺骗了 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/

相关文章:

editor - 如何在 Xcode 4 编辑器中禁用自动换行?

java - wysiwyg-Jquery HTML 编辑器,用于语法检查,支持所有浏览器

vim - Vim 中的 Sublime 类代码方法浏览器

git - 有没有办法在执行 git 提交时使用我的 .vimrc?

vim - 让 GTK+ 标识符通过你完成我的建议显示

haskell - Vim:在与光标相同的列中开始插入新行

java - 在 Chrome 和 Firefox 中启用 Java 来测试自签名小程序

javascript - 如何为不写入文件的 grunt 插件编写单元测试?

plugins - RabbitMQ MQTT 插件无法启动

WordPress : Disabled fields in user profil