web-dev-qa-db-ja.com

シェルコマンドを介してvimバッファの内容を渡し、分割ウィンドウに出力をキャプチャする方法

私はvimからのシェルコマンドの実行に関する多くのスレッド、vimコマンドに関する多くのドキュメント、.vimrcなどを読みましたが、「ex」言語またはvimマッピングを十分に理解していないようです。欲しいので、ここで私はこの質問をしています。ここに行きます:

私はvimにオープンバッファを持っています(Snow Leopardで最新の安定したMacVimを使用していますが、GUIモードではありません)。その内容は後でコマンドラインツールにフィードして処理し、出力を提供します。私が欲しいのは、次のことができるようにすることです。

  1. キーを押す(またはキーの組み合わせ、またはviコマンドを発行する)
  2. 現在のバッファ(ファイルに保存されていない可能性があります)の内容をパイプで接続して、コマンドラインユーティリティを実行します
  3. その出力をキャプチャし、vimで、できれば新しい分割ウィンドウで表示します(:helpのように)

だから、要約すると:私は走ることができます

$ cat ~/myinput.txt | myScript > output.txt

しかし、可能であれば出力を新しい分割ウィンドウに入れて、vim内でそのようなことをしたいと思います。

更新:
もちろん、投稿した直後に、この件についてさらに情報を見つけました。私は今、vim内でこれを行うことができることを知っています:

:%! myScript

そして、myScriptの出力(バッファの内容がパイプされている)を現在のバッファに入れ、現在のバッファを置き換えます。

では、これらのコンテンツを新しい分割ウィンドウのバッファに入れる方法はありますか?ありがとう!

8
malvim

〜/ .vimrcまたは〜/ .vim/plugin /に.vim拡張子の付いたファイルに次のようなものを入れます:

command! FW call FilterToNewWindow('myscript')

function! FilterToNewWindow(script)
    let TempFile = tempname()
    let SaveModified = &modified
    exe 'w ' . TempFile
    let &modified = SaveModified
    exe 'split ' . TempFile
    exe '%! ' . a:script
endfunction

次に、「:FW "。

コマンド定義を変更して、関数に「ハードコーディング」するのではなく、フィルタースクリプト名の引数を渡すように要求することをお勧めします。

7
Heptite

このコマンドはあなたが望むことの半分をします。

map <Leader>r :!%:p<cr>

これが機能するには、現在のバッファがシバン行を含む実行可能ファイルである必要があります。

0
user3304574

@Heptiteの関数は、より一般的になりました。

function! FilterToNewWindow()
    let TempFile = tempname()
    let SaveModified = &modified
    exe 'w ' . TempFile
    exe '!chmod +x ' . TempFile
    let &modified = SaveModified
    exe ':e ' . TempFile
    exe '%! ' . @%
   exe 'w!'
endfunction

" bash execute contents of current buffer and filter it to a new window
command! FW call FilterToNewWindow()

`` `

0
Tiberiu Ichim
0