Python脚本发送命令到vim(mvim)

0 投票
1 回答
558 浏览
提问于 2025-04-16 17:12

我写了一个非常简单的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!

撰写回答