用于向vim发送命令的python脚本(mvim)

时间:2011-05-07 20:10:24

标签: python vim macvim

我写了一个非常简单的vim插件和python脚本,试图测试两者之间的一些通信。我的vim脚本看起来像这样:

function! HelloWorld()
    silent :!python helloworld.py
endf

nmap <C-P> :call HelloWorld()<CR>

然后我的python脚本如下所示:

import os;

os.system( 'mvim --servername VIM -u NONE -U NONE --remote-send \"<C-\\\\><C-N>:echo \'Hello World!\'<CR>\"' )

如果我在vim并按下,请使用“:调用HelloWorld()”命令,或者只是从相同或另一个mvim或vim实例中键入“:!python helloworld.py”,没有任何反应。但是,如果我单独从命令行调用脚本,mvim会做出相应的响应:显示“Hello World!”在底部。

有没有人知道为什么从vim调用时它无效?

1 个答案:

答案 0 :(得分:3)

尝试替换

silent :!python helloworld.py

silent :!(sleep 0.5s && python helloworld.py) &
redraw!

(重点是在远程命令到达之前返回vim)。如果它工作,那么问题是在接收shell输出时处理远程命令。您还可以尝试其他解决方法:

call system('python helloworld.py')

call system('python helloworld.py &')

pyfile helloworld.py

(请注意,最后一个需要使用+ python功能编译vim,并且还会改变vim使用的python解释器的状态。)

顺便说一下,当您不想看到脚本输出时,请使用system()调用而不是!。在redraw!之后使用silent !