シェルコマンドの出力をVimの新しいバッファーにパイプするにはどうすればよいですか?以下は明らかに機能しませんが、私が何をしているのかを見ることができます:
:!echo % | :newtab
シェルコマンドの出力を新しいバッファーを作成するコマンドにパイプすることはできませんが、新しいバッファーを作成し、Vimのコマンドラインに1つのエントリを指定して、シェルコマンドの出力をそのバッファーに読み込むことができます。あなたの例の作業バージョンは
:tabnew | r !echo <c-r>=bufname("#")<cr>
この場合のパイプ記号はVim exコマンド間の区切り文字であり、シェルのパイプではないことに注意してください。こちらもご覧ください
:help :tabnew
:help :r!
:help :bar
これが私がすることです。上記の回答のコメントに暗示されています。
: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
を使用します。
:tabnew | enew | r ! <your Shell cmd>
私のために働く。
結果を新しいバッファーに保存する必要があるが、古い現在のバッファーからの情報が必要な場合は、system()
を使用できます。
:let res = system('echo '.expand('%'))
:tabnew
:put=res
または後での現在のバッファ名を保存します:
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>