【问题标题】:python script to send commands to vim (mvim)将命令发送到 vim (mvim) 的 python 脚本
【发布时间】:2011-05-08 14:52:46
【问题描述】:

我写了一个非常简单的 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 调用时它不起作用?

【问题讨论】:

  • 好奇你为什么称它为 mvim 而不是 gvim?
  • 我认为 mvim 是 macvim 的缩写形式 code.google.com/p/macvim
  • 你知道你可以重新编译 Vim 以便它在内部与 Python 接口吗?无需在命令行中运行 Python 的僵硬杂物;与内置支持的接口更容易、更快、更灵活、更强大,只需要重新编译 Vim。请参阅:h python 的帮助。
  • @Herbert 我对 python 编译选项略有了解。如果我打算向公众发布我的插件,那么依赖使用 python 选项编译 vim 真的有意义吗?例如,我使用了很棒的 Command-T 插件,但我真的希望我不必自己构建 vim 来使用它。我想我更喜欢大多数插件开箱即用,除非自定义构建有非常大的性能优势,但考虑到 vim 的用户群无论如何都会非常技术性,我是否低估了用户进行自定义构建的意愿?跨度>
  • 你说得对,这是不想使用内置 python 支持的正当理由。但是,如果计划是分发,那么在 VimScript 中构建它似乎会更好,因为即使您对 python 的外部调用也会在某些系统上出现问题(我在这里特别考虑 Windows)。也许这取决于你想要的是否已经在 python 中完成。

标签: python vim macvim


【解决方案1】:

尝试替换

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!

【讨论】:

  • 原来是一个愚蠢的错字...错误地输入了脚本名称。但是,我仍然尝试将其更改为使用“system()”。如果我以这种方式开始,Vim 告诉我 system 不是命令。你能给我一个例子,说明这条线的外观(重绘和一切)吗?我不完全理解你的建议
  • @drewag 我在system() 前面忘记了call。更新。重绘行很简单:只需将redraw! 放在silent !... 之后的下一行即可。
猜你喜欢
  • 2019-02-25
  • 2011-03-11
  • 2012-07-19
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2017-03-09
相关资源
最近更新 更多