启动vim后的固定时间调用函数

时间:2013-04-12 19:07:18

标签: vim

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

如果有帮助我使用的是用perl和python编译的vim而且我有addon vimproc。

2 个答案:

答案 0 :(得分:0)

您最好的候选人是CursorHold,CursorHoldI事件。当用户暂停4秒时,它们会触发,因此频繁发生,但也可能不会注意到当时触发的慢速操作。

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

答案 1 :(得分: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。