繁体   English   中英

在Python中捕获vim命令的输出

[英]Capture output of vim command in Python

我想捕获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 -它对任何命令均有效。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM