5

かなり複雑になったスクリプトに取り組んでいます。ほぼ同一のコードを持つセクションがいくつかあると思います。バッファに 2 つ (またはそれ以上) のウィンドウがある vim でファイルを開き、同じファイルのウィンドウの内容を比較することはできますか? vimdiff は 2 つのファイルでしか機能しないようです。ファイルのコピーを作成して 2 つのバージョンを vimdiff しようとすると、差分の起点がファイルの先頭にロックされたままになります。ウィンドウのロックを解除して、比較したいファイルの部分にウィンドウを移動することはできますが、差分が表示されません。ヒントやヒントはありますか?比較したいセクションを切り取り、別のファイルに貼り付けて vimdiff を適用することもできますが、個別のファイルにパッチを適用しようとすると、どのセクションがどこから来たのかわからなくなるリスクがあり、より簡単な方法が必要だと確信しています。 、より簡単な方法。

4

2 に答える 2

2

私が通常行うことは、コピーとの差分です

:%w %.alt
:vert diffsplit %.alt

そして、「代替」バージョンを喜んで再配置して、疑似一致ビットが整列されるようにします。


(おそらく) git には、サブファイルの移動されたブロックの変更を検出できるはずの気の利いたマージ/差分カウパワーが含まれていることに注意してください

私は (まだ) 実際にこれを実践していませんがfugitive、vim 用の非常に優れた git プラグインがこの馬力の一部を活用して、これを簡単にすることができるかもしれないという予感があります。注: 使用可能になる前に scriptinh が必要になることは十分に予想されますが、それでもこのアイデアを共有できればよいと思いました (スクリプトを最初に理解できれば、スクリプトを共有できるかもしれません!)。

于 2011-04-25T15:11:31.257 に答える
1

私が時折使用しており、私の意見では非常にうまく機能する代替ソリューションはlinediff.vimです。

ビジュアルモードを使用して、任意のバッファーから 2 つのテキスト本文を選択し (または同じことを言えば同じ)、それらに対して vimdiff を実行できます。その優れた点は、一時差分バッファーを編集して保存するときに、保存せずに元のバッファーを変更で更新することです。

私の使用例の 1 つは、スクリプトのリファクタリングと並べ替えに関連するマージの問題を解決するときです。関数が移動され、おそらく変更も加えられた場合です。どちらの祖先からの変更も失われないようにするために、関数の 2 つのバージョンを視覚的に選択して linediff コマンドを実行するだけで比較します。

于 2012-04-24T07:49:22.823 に答える