2012-02-16 9 views
2

現在のバッファとそのセーブファイルの間でdiffを実行しようとしています。私はdiff出力に対して何らかの処理をしたいので、新しいバッファではなく、変数にそれを必要とします。これを行う方法の1つは、diff出力を変数に渡す

w !diff % - > tmpfile 
let myvar = system(cat tmpfile) 

もう少しエレガントな方法がありますか?

+0

サンプル 'vimrc'に':DiffOrig'コマンドが含まれています。それはあなたの質問に答えないので、私はコメントとして残しますが、これは関連しており、あなたに興味があるかもしれません。 – Benoit

答えて

0

あなたがバッファを書くことができますと仮定すると、あなたは、例えばへ

:let @a=system('diff ' . shellescape(expand('%')) . ' ' . shellescape(expand('%')) . '~') 

ような何かを行うことができます〜buffer.txtとそうでないレジスタa

に結果を入れて、私の予備試験では

:let @a="" 
:redir @A 
:%w !diff - "%~" 
:redir END 

をしようとするbuffer.txt比較する、とはいえ、これはWin32のGVIM、上で動作しないように表示されます。この作業を行うには、一時ファイルを使用しなければならない場合があります。

私はこれがすべてあなたが試したことに近いと認識しています。とにかく、おそらくあなたの考えを確認するのに役立ちます。

+0

''"' .expand( '%')。 '"'または '"%〜 "'を引用に使用しないでください。この目的に役立つ 'shellescape()'関数があります。忘れないでください。POSIXは、 '' '(と改行文字は' system() 'の中では動作しませんが、文書化されていてもvimのバグであると考えています) 。 – ZyX

+0

あなたの最初のバージョンでは何とかしたいと思っています何とか私はバックアップとの比較を考えたことがありませんでした – pconley

+0

@ZyX最後にあなたのフィードバックを取り入れる時間がありました... ... – sehe

関連する問題