python脚本发送命令给vim(mvim)
问题描述:
我写了一个非常简单的vim插件和python脚本,试图测试两者之间的一些通信。我的vim的脚本是这样的:python脚本发送命令给vim(mvim)
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调用时不工作?
答
尝试用
silent :!(sleep 0.5s && python helloworld.py) &
redraw!
替换
silent :!python helloworld.py
(该点在返回到VIM远程命令到达之前)。如果有效,那么问题是在接收shell输出时处理远程命令。您也可以尝试另一种解决方法:
call system('python helloworld.py')
,
call system('python helloworld.py &')
和
pyfile helloworld.py
(注意,最后一个需要的Vim +蟒蛇功能编译,也改变了蟒蛇的状态vim使用的解释器)。
顺便说一下,如果您不想看到脚本输出,请使用system()
而不是!
。在silent !
之后也使用redraw!
。
好奇你为什么称它为mvim而不是gvim? – Keith 2011-05-07 20:16:33
我认为mvim是macvim的缩写形式http://code.google.com/p/macvim/ – bernie 2011-05-07 20:26:46
您是否知道您可以重新编译Vim,使其在内部与Python接口?在命令行中不需要灵活运行Python;与内置支持接口更容易,更快,更灵活和强大,只需要重新编译Vim。在':h python'查看帮助。 – 2011-05-08 15:22:36