0

我想调用一个函数,该函数在调用后的固定时间(比如 30 秒)执行某些操作。该函数可以在初始化时或在使用期间的某个时候调用。在我等待的时候,我会像往常一样继续使用 vim。这可能吗?

如果它有帮助,我正在使用用 perl 和 python 编译的 vim,并且我有插件 vimproc。

4

2 回答 2

0

你最好的候选人是CursorHold,CursorHoldI事件。当用户暂停 4 秒时它们会触发,因此它经常发生,但他也很可能不会注意到随后触发的缓慢操作。

你无法避免 Vim 阻塞;特别是不适合加载慢速插件。Vim(script) 是单线程的;无法进行后台处理。虽然您可以使用(小心!)集成(Perl,Python,...)解释器(用于后台任务)的多线程支持,但当您需要“回调”到 Vim 核心时,这无济于事,您需要为用 Vimscript 编写的插件做。

于 2013-04-12T19:36:05.400 回答
0

我想出了以下内容:

if has('python') "{{{ LoadPythonDelayed
function! LoadPythonDelayed()

python << ENDP
import time
from threading import Thread
import vim

def LoadAddonPy():
    time.sleep(2)
    vim.command('call LoadAddon()')

Thread(target=LoadAddonPy).start()

ENDP
return ''
endfunction

call LoadPythonDelayed()
endif

到目前为止它似乎工作,也许它可能会触发错误(如果有的话我会放在这里)。到目前为止我注意到的一件事是,通过使用它,我无法在线程存在之前退出 vim。

于 2013-04-12T22:03:54.163 回答