我写了一个非常简单的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调用时它无效?
答案 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 !
。