vim:ファイル全体ではなく、2つのファイルの2つのセクションを比較しますか?


14

システムをNagios 2からNagios 3にアップグレードしました。現在、古い構成ファイルと新しい構成ファイルのいくつかの違いを比較しています。

構成ファイルに大きな変更があります。vimdiffには無関係な相違が多く表示さ#れ、行頭などでコメントを処理できないため、ファイル全体に対してdiffを実行したくありません。

vimまたはvimdiffのような機能を使用して、2つの異なるファイルの2つの特定のセクションで差分を実行できますか?

たとえば、次のような行のみを比較します。

# Define a service to check the load on the local machine. 

define service{
    use                             local-service         ; Name of service template to use
    host_name                       localhost
    service_description             Blah Blah
    check_command                   Blah Blah
    }

回答:


18

linediff.vimがあなたが望むものであるように聞こえます:「テキストの2つのブロックでインタラクティブなdiffを実行してください」。

:Linediffコマンドで各ブロック(行範囲)を指定します(たとえば:4,10Linediff、または最初に視覚的な選択を行い、次に入力します:Linediff(これはとして表示されます:'<,'>LineDiff))。範囲は同じファイル/バッファからでも、異なるものでもかまいません。2つの範囲を指定すると、指定した範囲の2つの新しいdiffモードバッファー(分割)がある新しいタブが開きます。:wこれらのバッファのいずれかを編集して、元の範囲を更新できます。完了したら:q、diffバッファーを使い:LinediffReset、元のバッファーの範囲指定子を取り除きます。

stackoverflowの答え私は最初linediff.vimを知っまた、マッピングのカップルを示唆しています。上の他の回答その質問には、カスタムソリューションと、これと同じ問題に対処することができ、別のプラグインを言及します。


6

これを行うための本当に簡単な方法は見つかりませんでしたが、NrrwRgn(Narrow Region)プラグイン、http: //www.vim.org/scripts/script.php?script_id = 3075でかなりの成功を収めました。バッファの領域を選択して、その領域を新しいバッファで開くことができます。新しいバッファを編集できます。閉じると、プラグインは編集したテキストを元のファイルの元の領域に自動的にコピーします。また、1つ以上のファイルの異なる領域を新しいバッファーにコピーしてから、それらの新しいバッファーを差分することもできます。これが、私が通常プラグインを使用する方法です。1つのファイルで定義された類似の関数の違いをチェックするためです。

あなたの場合、Vimで両方のファイルを開きV、最初のファイルで目的のセクションを選択して入力\nrし、そのセクションを新しいバッファーにコピーすることができます。他のファイルの同様のセクションで繰り返します。次に、2つの新しいバッファーのそれぞれで、を実行し:diffthisます。


ありがとうございました!どうする\nr
ステファンLasiewski

1
プラグインは<Leader>nr<Leader>デフォルトで `\`の場合、選択した領域を新しいバッファーにコピーするプラグインコマンドにマップします。
ゲイリージョン

@garyjohn分割をどのように調整しNrrrRgnますか?
devの

1
@dev:〜/ .vimrcに次の2行のNrrwRgn構成がlet g:nrrw_rgn_vert = 1ありlet g:nrrw_rgn_protect = 'n'ます。前者では、NrrwRgnは現在のウィンドウの左に開いて分割されます。すぐに左に開くか、左に開くかを忘れてしまいました。とはいえ、私はこれのためにNrrwRgnを使用せず、Linediffを見つけました。新しいタブで新しい領域が開きます。これは、よりきれいで便利だと思います。LInediffはhttp://www.vim.org/scripts/script.php?script_id=3745またはで見つけることができますhttps://github.com/AndrewRadev/linediff.vim
ゲイリージョン16

@garyjohnに感謝します。NrrwRgn一番左または一番上にあるため、分割はほとんど管理できません。!バリアントを試してみましたが、非常に壊れやすいことがわかりました(スクリプトエラー+元のファイルに戻るクリーンな方法がない)。与えるlinediff.vim私は希望をんにもかかわらず、あまりにも試してNrrwRgn、将来的に向上させます。
dev

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.