私はvimからのシェルコマンドの実行に関する多くのスレッド、vimコマンドに関する多くのドキュメント、.vimrcなどを読みましたが、「ex」言語またはvimマッピングを十分に理解していないようです。欲しいので、ここで私はこの質問をしています。ここに行きます:
私はvimにオープンバッファを持っています(Snow Leopardで最新の安定したMacVimを使用していますが、GUIモードではありません)。その内容は後でコマンドラインツールにフィードして処理し、出力を提供します。私が欲しいのは、次のことができるようにすることです。
だから、要約すると:私は走ることができます
$ cat ~/myinput.txt | myScript > output.txt
しかし、可能であれば出力を新しい分割ウィンドウに入れて、vim内でそのようなことをしたいと思います。
更新:
もちろん、投稿した直後に、この件についてさらに情報を見つけました。私は今、vim内でこれを行うことができることを知っています:
:%! myScript
そして、myScriptの出力(バッファの内容がパイプされている)を現在のバッファに入れ、現在のバッファを置き換えます。
では、これらのコンテンツを新しい分割ウィンドウのバッファに入れる方法はありますか?ありがとう!
〜/ .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
"。
コマンド定義を変更して、関数に「ハードコーディング」するのではなく、フィルタースクリプト名の引数を渡すように要求することをお勧めします。
このコマンドはあなたが望むことの半分をします。
map <Leader>r :!%:p<cr>
これが機能するには、現在のバッファがシバン行を含む実行可能ファイルである必要があります。
@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()
`` `