普段GUIにおいて、2つのファイルを比較する場合、WinMergeを利用しています。LinuxなどCLIで作業する場合において、ファイルを比較する場合「diff」や「sdiff」コマンドを使って確認します。しかし、ファイルの差異が少ない場合は良いですが、1000行を超えるテキストファイル同士を比較して、何十箇所も差異があった場合標準出力に大量の出力が出て、出力のどこに違いがあるのかわからずヒエッとしてます。できれば、余計なパッケージを入れることなく、綺麗に比較できるツールがあれば良いなと思っていましたが、emacsのediff-mergeが私のイメージに合いました。
#emacsのediff-merge
emacsの一機能であり、2つのファイルを比較して、差異をハイライトで見ることのできるツールです。2つのファイルを並べて、差異ごとに異なる箇所を確認でき、キーで1箇所ずつ自身のペースで確認できます。
#ediff-mergeで比較する
インストール方法にもよりますが、Linux系などemacsが使える環境であれば使えます。では使って見ます。まず、以下のようなファイルを準備しました。
比較ファイル1
<!DOCTYPE html>
<html lang=“ja”>
<head>
<meta http-equiv="content-language" content="ja">
<meta charset="UTF-8">
<meta name="robots" content="noindex,nofollow">
<title></title>
<script type="text/javascript"><!-- alert("");--></script>
<style>body {background: #ffffff;}</style>
<script type="text/javascript" language="javascript" src=""></script>
<link rel="stylesheet" type="text/css" href="" />
</head>
<body></body>
</html>
比較ファイル2
<!DOCTYPE html>
<html lang=“ja”>
<head>
<meta http-equiv="content-language" content="ja">
<meta charset="UTF-8">
<meta name="robots" content="noindex,nofollow">
<title></title>
<script type="text/javascript"><!-- alert("");--></script>
<style>body {background: #ff0000;}</style>
<script type="text/javascript" language="javascript"></script>
<link rel="stylesheet" type="text/css" href="" />
</head>
<body></body>
</html>
Linuxのコマンドラインからemacsを起動する
#emacsが入っているか確認
$ which emacs
/bin/emacs
$ emacs
emacsで比較する
※すでにご存知だと存じますが、emacsの「M-x」はエスケープキーを押下した後、xキーを押下します。
$ M-x emacs-version
GNU Emacs 24.3.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.8.8) of 2015-11-21 on worker1.bsys.centos.org
$M-x ediff-merge
File A to merge (default ~/): ~/main.html
File B to merge (default main.html): ~/other.html
画面が3分割され、左上にはmain.htmlを表示、右上にはother.htmlを表示、下には2ファイルの差異を表示しています。
差異がある箇所をハイライトしています。それぞれ差異がある箇所に色をつけています。
差異部分をなぞる
「p」キー(進む)、または、「n」キー(戻る)
ショートカットによって、次の差異箇所に移動します。
ediff-mergeから抜ける
qキーを押下
Quit this Ediff session? (y or n)