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()”命令,或者只需从相同或中键入“:!python helloworld.py”另一个 mvim 或 vim 实例,什么也没有发生。但是,如果我单独从命令行调用脚本,mvim 会做出适当的响应:显示“Hello World!”沿着底部。
有谁知道为什么从 vim 调用时它不起作用?
I wrote a very simple vim plugin and python script trying to test some communication between the two. My vim-script looks like this:
function! HelloWorld()
silent :!python helloworld.py
endf
nmap <C-P> :call HelloWorld()<CR>
then my python script looks like this:
import os;
os.system( 'mvim --servername VIM -u NONE -U NONE --remote-send \"<C-\\\\><C-N>:echo \'Hello World!\'<CR>\"' )
If I am in vim and press , use the ":call HelloWorld()" command, or just type ":!python helloworld.py" from the same or another mvim or vim instance, nothing happens. However, if I call the script from the command line separately, mvim responds appropriately: shows "Hello World!" along the bottom.
Does anyone have any idea why it is not working when called from vim?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试替换
为
(重点是在远程命令到达之前返回到 vim)。如果有效,则问题出在接收 shell 输出时处理远程命令。您还可以尝试另一种解决方法:
、
和
(请注意,最后一个方法需要使用 +python 功能编译 vim,并且还会更改 vim 使用的 python 解释器的状态)。
顺便说一句,当您不想看到脚本输出时,请使用
system()
调用而不是!
。还可以在silent!
之后使用redraw!
。Try replacing
with
(the point is in returning to vim before remote command arrives). If it works, then the problem is in processing remote commands while receiving shell output. You can also try another workarounds:
,
and
(Note that the last one requires vim compiled with +python feature and also alters the state of python interpreter used by vim).
By the way, use
system()
call instead of!
when you don't want to see the script output. Also useredraw!
aftersilent !
.