python 脚本向 vim 发送命令 (mvim)

发布于 2024-11-05 20:22:24 字数 591 浏览 1 评论 0 原文

我编写了一个非常简单的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖伴 2024-11-12 20:22:24

尝试替换

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() 调用而不是 ! 。还可以在 silent! 之后使用 redraw!

Try replacing

silent :!python helloworld.py

with

silent :!(sleep 0.5s && python helloworld.py) &
redraw!

(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:

call system('python helloworld.py')

,

call system('python helloworld.py &')

and

pyfile helloworld.py

(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 use redraw! after silent !.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文