1

:sign placevimモジュールを使用してPythonでスクリプトを作成し、Vimコマンド()の出力をキャプチャしたいと思います。

でコマンドを実行できますが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

残念ながら、Vimscriptのサインはまだほとんどサポートされていません(私の他の回答によると)。私がすることは、:redirとの周りにVimscriptラッパー関数を記述し:signvim.eval()それをPythonから作成することです。そのラッパーでは:redir => var、ローカル変数に移動して、レジスターを壊さないようにすることができます。

于 2013-01-24T16:51:41.703 に答える
0

現在、PythonスクリプトからVimコマンドの出力をキャプチャするためのより良い方法はありませんが、リダイレクトして(変数またはバッファに)、その内容を評価する以外にありません。

于 2013-01-28T09:16:02.213 に答える
0

https://vi.stackexchange.com/a/13881/10254は興味深いかもしれません、基本的に入力を取得し、コマンドを実行し、キャプチャして入れます。Pythonではなくvimscript関数ではありますが、 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 に答える