我想捕获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
的问题 - 它对任何命令都有效。
答案 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