8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CLIでもWinMergeのように綺麗に比較したい(emacsのediff-merge)

Posted at

普段GUIにおいて、2つのファイルを比較する場合、WinMergeを利用しています。LinuxなどCLIで作業する場合において、ファイルを比較する場合「diff」や「sdiff」コマンドを使って確認します。しかし、ファイルの差異が少ない場合は良いですが、1000行を超えるテキストファイル同士を比較して、何十箇所も差異があった場合標準出力に大量の出力が出て、出力のどこに違いがあるのかわからずヒエッとしてます。できれば、余計なパッケージを入れることなく、綺麗に比較できるツールがあれば良いなと思っていましたが、emacsのediff-mergeが私のイメージに合いました。

#emacsのediff-merge
emacsの一機能であり、2つのファイルを比較して、差異をハイライトで見ることのできるツールです。2つのファイルを並べて、差異ごとに異なる箇所を確認でき、キーで1箇所ずつ自身のペースで確認できます。

#ediff-mergeで比較する
インストール方法にもよりますが、Linux系などemacsが使える環境であれば使えます。では使って見ます。まず、以下のようなファイルを準備しました。

比較ファイル1

main.html
<!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

other.html
<!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

比較画面
スクリーンショット 2016-04-04 2.19.15.png

画面が3分割され、左上にはmain.htmlを表示、右上にはother.htmlを表示、下には2ファイルの差異を表示しています。

ハイライトさせる
「h」キー
スクリーンショット 2016-04-04 2.22.30.png

差異がある箇所をハイライトしています。それぞれ差異がある箇所に色をつけています。

差異部分をなぞる
「p」キー(進む)、または、「n」キー(戻る)
ショートカットによって、次の差異箇所に移動します。

ediff-mergeから抜ける

qキーを押下
Quit this Ediff session? (y or n) 

抜けた直後、3分割したemacs画面になります。
emacsを抜ける、分割画面で作業するなど選んでください。
スクリーンショット 2016-04-04 2.28.46.png

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?