在Python中捕获vim命令的输出

时间:2013-01-24 15:04:11

标签: python vim

我想捕获Vim命令(:sign place)的输出,使用vim模块在Python中编写脚本。

我可以使用vim.command(...)执行命令,但这不会返回命令的输出。我可以使用vim.eval(...)来评估vimL命令,但这仅适用于变量和函数,而不适用于命令。

我能捕获此命令输出的唯一方法是重定向到寄存器,然后评估寄存器的内容:

vim.command('redir @a')
vim.command('silent sign place')
vim.command('redir END')
command_output = vim.eval('@a')

但对于一项看似简单的任务来说,这似乎是很多工作。有没有更好的方法呢?

注意:这不是特定于示例命令sign place的问题 - 它对任何命令都有效。

3 个答案:

答案 0 :(得分:0)

不幸的是,对于Vimscript中的迹象几乎没有支持(根据我的other answer)。我要做的是围绕来自Python的:redir:sign以及vim.eval()编写一个Vimscript包装函数。在该包装器中,您可以:redir => var到局部变量,这样就不会破坏寄存器。

答案 1 :(得分:0)

目前没有更好的方法从Python脚本捕获Vim命令的输出,除了重定向(到变量或缓冲区),然后评估它的内容。

答案 2 :(得分:0)

https://vi.stackexchange.com/a/13881/10254可能很有意思,基本上获取输入,然后运行命令,捕获并放置。虽然在vimscript函数中,但不是python,Capture(excmd) PutAfterCapture(command) GetInputCommandThenCaptureAndPut()

摘录:

func!  abort  " from tpope's scriptease.vim
try
    redir => out
    exe 'silent! '.a:excmd
finally
    redir END
endtry
return out
endfunc