回答:
シェルコマンドの出力を新しいバッファーを作成するコマンドにパイプすることはできませんが、新しいバッファーを作成し、Vimのコマンドラインの1つのエントリでそのバッファーにシェルコマンドの出力を読み込むことができます。あなたの例の作業バージョンは
:tabnew | r !echo <c-r>=bufname("#")<cr>
この場合のパイプ記号は、シェルのパイプではなく、Vim exコマンド間のセパレーターであることに注意してください。こちらもご覧ください
:help :tabnew
:help :r!
:help :bar
:r!echo
、バッファを変更しない限りではありません。
これが私がやることです。上記の回答のコメントで暗示されています。
: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
新しいタブに使用します。
結果を新しいバッファーに保存する必要があるが、古い現在のバッファーからの情報が必要な場合は、次のいずれかを使用できますsystem()
。
:let res = system('echo '.expand('%'))
:tabnew
:put=res
または、後で使用するために現在のバッファ名を保存します。
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>