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调用时不工作?

+0

好奇你为什么称它为mvim而不是gvim? – Keith 2011-05-07 20:16:33

+0

我认为mvim是macvim的缩写形式http://code.google.com/p/macvim/ – bernie 2011-05-07 20:26:46

+0

您是否知道您可以重新编译Vim,使其在内部与Python接口?在命令行中不需要灵活运行Python;与内置支持接口更容易,更快,更灵活和强大,只需要重新编译Vim。在':h python'查看帮助。 – 2011-05-08 15:22:36

尝试用

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!

+0

原来是一个愚蠢的错字...错误的脚本名称。不过,我仍试图将其改为使用“system()”。 Vim告诉我,如果我以这种方式启动系统,系统不是一个命令。你能给我一个例子,看看这条线应该是什么样的(重绘和一切)?我不完全理解你在暗示什么 – drewag 2011-05-07 23:29:37

+0

@drewag我忘记了'system()'前面的'call'。更新。重绘线很简单:只需在'silent!...'之后的下一行放置'redraw!'即可。 – ZyX 2011-05-08 06:53:58