Vim功能执行命令延迟直到结束
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim功能执行命令延迟直到结束相关的知识,希望对你有一定的参考价值。
我尝试在我的.vimrc
中编写一个简单的函数,可以通过映射访问。
此函数应使用YankRing插件。因此,如果尚未打开,它首先打开一个带YankRing缓冲区的窗口。我可以确认该函数中每个部分的功能,但是一旦我在窗口打开后定义任何命令,它将首先执行,然后就会打开窗口。实际上似乎发生了某种情况,导致缓冲区状态(name,line,col,...)出现在命令行中,但是缓冲区本身的窗口没有打开。
这是一个最小的例子,使用sleep
作为以下命令,导致窗口打开的延迟:
function! s:foo()
execute('YRShow 0') " Opens the YankRing window, if not already open.
echo 'bar' " Just to have some visual reference.
sleep 3 " Show the delay of the window open and the echo message.
endfunction
观察到的行为:
首先,命令行获取此缓冲区状态信息内容。之后,立即显示echo
消息。然后在3秒延迟后,窗口打开。
预期行为: 打开窗户。显示消息并等待3秒。
有谁了解这里发生了什么?对于我的功能,用户需要在他可以进行交互之前观看窗口内容。
谢谢!
某些插件映射和命令是异步的。 Vim有一个活动系统; CP。 :help autocommand
。在这种情况下,你必须挂钩相应的事件(:help autocmd-events
)。对于插件,这些通常是BufNew
或FileType
。
使用映射,这些就像类型化命令一样,并插入到输入缓冲区中。要在任何其他挂起命令之后异步执行映射,可以使用feedkeys()
函数。仅在必要时执行此操作,因为其使用会干扰宏录制和命令重复!
我简要介绍了YankRing代码。 :YRShow
功能似乎是简单的同步代码。您遇到的效果可能是在执行函数时尚未绘制内容。您可以在:redraw
命令之前通过:sleep
进行屏幕更新。
以上是关于Vim功能执行命令延迟直到结束的主要内容,如果未能解决你的问题,请参考以下文章