web-dev-qa-db-ja.com

vim:2つのファイルの2つのセクションを比較しますが、ファイル全体を比較しませんか?

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

構成ファイルに大幅な変更があり、vimdiffがあまりにも多くの無関係な違いを示しており、行頭の#コメントの処理に問題があるため、ファイル全体で差分を実行したくありません。

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

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

# 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
    }
14

linediff.vim が必要な場合があります:「2つのテキストブロックでインタラクティブな差分を実行する」。

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

Stackoverflow answer linediff.vimについて最初に知った場所でも、いくつかのマッピングが示唆されています。 その質問 に関する他の回答も、この同じ問題に対処できるカスタムソリューションと別のプラグインについて言及しています。

20
Chris Johnsen

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

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

6
garyjohn

最近投稿したspotdiff.vim( http://www.vim.org/scripts/script.php?script_id=5509 )はどうですか?

0
Rick Howe