1

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

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

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

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

但这对于一个看似简单的任务来说似乎需要做很多工作。有没有更好的方法来做到这一点?

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

4

3 回答 3

0

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

于 2013-01-28T09:16:02.213 回答
0

不幸的是,Vimscript 中的符号支持很少(根据我的其他答案)。我要做的是围绕:redirand编写一个 Vimscript 包装函数:sign,以及vim.eval()来自 Python 的那个。在该包装器中,您可以:redir => var使用局部变量,以免破坏寄存器。

于 2013-01-24T16:51:41.703 回答
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
于 2017-10-10T01:18:02.447 回答