KIMUSON.DEV

diff コマンドを見やすくする

    2020年06月16日

    TL;DR

    Mac 標準の diff コマンドが見づらいので、見やすくするメモ。

    標準の diff コマンドは、

    $ diff file1 file2
    2c2
    < hello world2
    ---
    > hello world

    こんな感じで、一応差分はわかるけど見にくいので、みやすくします

    環境

    $ sw_vers
    ProductName:    Mac OS X
    ProductVersion: 10.15.7
    BuildVersion:   19H2
    
    $ diff -v
    diff (GNU diffutils) 2.8.1
    Copyright (C) 2002 Free Software Foundation, Inc.
    
    This program comes with NO WARRANTY, to the extent permitted by law.
    You may redistribute copies of this program
    under the terms of the GNU General Public License.
    For more information about these matters, see the file named COPYING.
    
    Written by Paul Eggert, Mike Haertel, David Hayes,
    Richard Stallman, and Len Tower.

    colordiff の導入

    diff をカラーリングできる colordiff を brew から導入します

    $ brew install colordiff

    .zshrc にエイリアスを貼って diff で呼ばれるようにします

    if [[ -x `which colordiff` ]]; then
        alias diff='colordiff'
    fi

    これでカラーリングされるようになりました

    Git っぽい diff を表示する

    色付けがされただけでもだいぶ見やすくなったんですが、-u オプションを付けると git diff っぽい見た目で差分を表示できます

    $ diff -u file1 file2
    --- file1	YYYY-MM-DD hh:mm:ss.000000000 +0900
    +++ file2	YYYY-MM-DD hh:mm:ss.000000000 +0900
    @@ -1,2 +1,2 @@
     hello world
    -hello world1
    +hello world2

    うん、見慣れた感じでとても見やすい

    横並びで比較する

    -y オプションで、横並びで比較できます

    併用できるオプションとして、

    • --left-column: 左側は全表示、右側は差分表示に
    • --suppress-common-lines: 差分だけ表示

    があります

    $ diff -y file1 file2
    hello world                                                     hello world
    hello world1                                                  | hello world2
    
    $ diff -y --left-column file1 file2
    hello world                                                   (
    hello world1                                                  | hello world2
    
    $ diff -y --suppress-common-lines file1 file2
    hello world1                                                  | hello world2

    どれもみやすいですね

    この中なら、--left-column が良さそう

    エイリアス

    オプション付きだと長くて普段使いしにくいので、エイリアスを貼っておきます

    alias diffg='diff -u'
    alias diffy='diff -y --left-column'

    以上になります