web-dev-qa-db-ja.com

シェルコマンド(!)の出力をVimの新しいバッファーにパイプする

シェルコマンドの出力をVimの新しいバッファーにパイプするにはどうすればよいですか?以下は明らかに機能しませんが、私が何をしているのかを見ることができます:

:!echo % | :newtab
36
Richie Marquez

シェルコマンドの出力を新しいバッファーを作成するコマンドにパイプすることはできませんが、新しいバッファーを作成し、Vimのコマンドラインに1つのエントリを指定して、シェルコマンドの出力をそのバッファーに読み込むことができます。あなたの例の作業バージョンは

:tabnew | r !echo <c-r>=bufname("#")<cr>

この場合のパイプ記号はVim exコマンド間の区切り文字であり、シェルのパイプではないことに注意してください。こちらもご覧ください

:help :tabnew
:help :r!
:help :bar
28
garyjohn

これが私がすることです。上記の回答のコメントに暗示されています。

:new | r ! <cmd>
:new | r ! <cmd> #   (# is replaced with filename)

例1/tmp内のすべてのテキストファイルを検索します

:new | r ! find /tmp -name '*.txt'

例2:ファイルfoo.txtを編集していて、ls -la foo.txtを実行して出力をバッファに取得したい場合:

:new | r ! ls -la #

#は、編集している元のバッファのファイル名に置き換えられます。これは、アドホックなソース管理コマンドに特に役立ちます。

:new | r ! hg annotate -un #

:newは水平分割を作成します。代わりに垂直分割が必要な場合は:vnewを使用し、新しいタブには:tabnewを使用します。

19
overthink
:tabnew | enew | r ! <your Shell cmd>

私のために働く。

4
justrajdeep

結果を新しいバッファーに保存する必要があるが、古い現在のバッファーからの情報が必要な場合は、system()を使用できます。

:let res = system('echo '.expand('%'))
:tabnew
:put=res

または後での現在のバッファ名を保存します:

:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>
2
Luc Hermitte