回答:
を使用:redir
して、出力を変数、レジスタ、またはファイルにリダイレクトできます。名前のないレジスタにリダイレクトする例:
:redir @">|silent scriptnames|redir END|enew|put
あるいは、Tim Popeのscriptease.vimは、クイックフィックスリストとに:Scriptnames
ロード:scriptnames
するコマンドを提供します:copen
。
多くのコマンドをリダイレクトしていることに気付いた場合、これをコマンドにまとめることもできます。
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
これで、:Redir
コマンドを使用して、出力を新しいバッファーにリダイレクトできます。例:Redir scriptnames
または:Redir ls
。
Vim 8には新しいexecute()
機能が付属しています。元のコマンド出力をキャプチャexecute()
する代わりに、関数toを使用でき:redir
ます。
:enew|pu=execute('scriptnames')
詳細については、以下を参照してください。
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
:redir END
Vimにメッセージのリダイレクトを終了するよう指示します。参照:h :redir
完全を期すために、私はromainlから収集した(盗んだ)この素晴らしい機能を紹介したいと思います。
" redirect the output of a Vim or external command into a scratch buffer
function! Redir(cmd)
if a:cmd =~ '^!'
execute "let output = system('" . substitute(a:cmd, '^!', '', '') . "')"
else
redir => output
execute a:cmd
redir END
endif
tabnew
setlocal nobuflisted buftype=nofile bufhidden=wipe noswapfile
call setline(1, split(output, "\n"))
put! = a:cmd
put = '----'
endfunction
command! -nargs=1 Redir silent call Redir(<f-args>)
これにより、通常のコマンド出力またはシステムコマンド出力が取得され、新しいタブに配置されます。行を変更してお気軽tabnew
にvsplit
かsplit
など
bufferize.vimプラグインもあります。
:Bufferize scriptnames
これは基本的に受け入れられた回答のパッケージ化されたバージョン(を使用:redir
)であり、一部のユーザーにとってはより便利な場合があります。
END
意味ですか?