Python脚本发送命令到vim(mvim)
我写了一个非常简单的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中按下某个键,使用":call HelloWorld()"命令,或者直接在同一个或另一个mvim或vim窗口中输入":!python helloworld.py",都没有任何反应。不过,如果我在命令行中单独调用这个脚本,mvim就会正常响应:在底部显示“Hello World!”
有没有人知道为什么在vim中调用时不工作呢?
1 个回答
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
(注意,最后一种方法需要vim是用+python功能编译的,并且会改变vim使用的python解释器的状态)。
顺便提一下,当你不想看到脚本输出时,使用 system()
调用,而不是 !
。同时在 silent !
之后使用 redraw!
。