パーソナルツール

diffoptオプションを設定して、diffsplitの結果を変える

作者: 小見 拓 最終変更 2012年01月08日 11時57分

vimエディタを使用して、2つのテキストファイルの差分を表示する方法を紹介します。 このテクニックは、主にファイルの比較をする場合に使用します。 (Windows, Mac)

概要

vimエディタの設定ファイルで「diffopt」オプションを指定すると、 2つのテキストファイルの差分を表示する「diffsplit」コマンドの挙動を、 自分の好みの表示方式にカスタマイズできます。

「diffopt」オプションの説明

diffの結果を表示するウィンドウの分割形式

:vertical diffsplit 差分を取りたいファイル

差分を取りたいファイルの名前が「theother.txt」なら、コマンド例は次の通りです。

:vertical diffsplit theother.txt
2つのテキストファイルの差分表示(横並べ)

Note

「vertical」コマンドは「ウィンドウを横2つに分割しろ」という指定です。
このオプションを外した場合、ウィンドウは縦2つに分割された後、 各差分がそれらのウィンドウに表示されます。

" 差分を取りたいファイルが「theother.txt」の場合のコマンド例
:diffsplit theother.txt
2つのテキストファイルの差分表示(縦並べ)

VDSplitコマンドを使う

Kaoriya版パッチのあたっているvimエディタなら、 「vertical diffsplit」と同様の機能を持つコマンドとして、 「VDSplit」というコマンドが組み込まれています。
この「VDSplit」コマンドを使用すると、 より少ないキーストロークで2つのファイルの差分を表示できます。

:VDSplit 差分を取りたいファイル

" 差分を取りたいファイルが「theother.txt」の場合のコマンド例
:VDSplit theother.txt
2つのテキストファイルの差分表示(横並べ)

Note

「VDSplit」コマンドはKaoriya版パッチのあたっているvimエディタでのみ、 使用できるコマンドです。

指定のバッファとの差分のとり方

差分を取りたい2つ目のファイルがバッファに入っている時(既にエディタで読み込んでいる時)、
そのバッファは「# + バッファの番号」という書式で指定できるので、 次のような方法でも差分をとることができます。
この方法は大抵、ファイル名を指定した場合よりもキーストロークが少なくて済むので、 覚えておくと役に立ちます。

:VDSplit 差分を取りたいバッファ

" 差分を取りたいバッファの番号が5の場合のコマンド例
:VDSplit #5
2つのテキストファイルの差分表示(横並べ)

Note

バッファの番号を知るには「buffers」コマンドか、「ls」コマンドを実行してください。
vimエディタのコマンドの中で「# + バッファの番号」と記述すると、 その番号のバッファを指定したことになります。

:buffers
「buffers」コマンドの実行結果

詳しくは、vimエディタのヘルプを見てもらうとして、今回は、diffoptで指定できる"icase"オプションと、"iwhite"オプションの話。

これらのオプションをdiffoptで指定すると、diffsplitの結果がちょっとだけ変えられるのです。

・"icase"オプションを指定すると、diffsplitを実行する時に、アルファベット大文字、小文字を区別しないdiffを実行するようになり、

・"iwhite"オプションを指定すると、diffsplitを実行する時に、半角スペースの数が、比較している行で違っていても、それを無視してdiffを実行するようになります。

diffoptを設定する場合は、↓このように指定します。 カンマで区切って複数のオプションを指定できます。 当然、この設定は、設定ファイル.vimrcファイルか_vimrcファイルに書いておきます。

:set diffopt=filler,icase,iwhite

既存の設定を上書きしないように、

:set diffopt

と入力して、現在の設定を確認した上で、(現在の設定に)追加するような形で指定すると良いでしょう。

なお、diffexprを設定している場合、(設定したdiffexprの中でこれらのオプションを使っていない限り)、"icase"、"iwhite"のオプションは使用されませんので、注意してください。

ドキュメントアクション
コメント
blog comments powered by Disqus
Update Feed
RSS1.0 / RSS2.0 / ATOM
Comment

Recent Comments