差分がある場合、見栄えをよくするためにどのように色付けできますか?コマンドラインで使用したいので、GUIソリューションは使用しないでください。
差分がある場合、見栄えをよくするためにどのように色付けできますか?コマンドラインで使用したいので、GUIソリューションは使用しないでください。
回答:
のマンページは、diff
それ自体からのカラー化の解決策を提案していません。の使用を検討してくださいcolordiff
。これdiff
は、読みやすくするために色付きの構文強調表示を使用して出力を補強することを除いて、diffと同じ出力を生成するラッパーです。
diff old new | colordiff
あるいは単に:
colordiff old new
インストール:
sudo apt-get install colordiff
brew install colordiff
またはport install colordiff
less -R
色のエスケープシーケンスを正しく表示するを使用して、lessにパイプすることができます。
-y
有効にするオプション)では機能しません☹ vimdiff
以下の提案はおそらくより良い方法です
colordiff
適していますsvn diff | colordiff
(つまり、あなたが唯一の差分を持っている状況では、2つのファイルは差分を取っていません)。
-y
)サポートが含まれるようになりました。
Vimを使用:
diff /path/to/a /path/to/b | vim -R -
さらに良いことに、VimDiff(またはvim -d
、タイプの方が短い)は、2つ、3つ、または4つのファイルの違いを並べて表示します。
vim -d /path/to/[ab]
vimdiff file1 file2 file3 file4
ctrl-c
とはctrl-x
Vimの中の他の用途があります。ctrl-q
多くの端末でキャプチャされます。ニーズに最も適した方法を見つけるには、書き込みと終了を参照してください。
zsh
?構成がわかりません=(...)
。第二に、私はdiff -ur a b
念頭に置いていました。
実際には、さらに別のオプションがあるようです(私が最近気付いたのは、上記の問題が発生したときに)。
git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>
Gitを使用している場合(既に使用している可能性があります)、ファイル自体がバージョン管理されていなくても、比較のためにGitを使用できます。デフォルトで有効になっていない場合、ここでカラーサポートを有効にすることは、前述の回避策のいくつかよりもかなり簡単なようです。
git diff <(xxd file1) <(xxd filed)
ません。
git help diff
ます。したがって、git diffが空cd
になった場合は、どこにいるか試してください。
git config color.diff auto
git diff --no-index
して2つのファイルを比較します。
diff --color
オプションがGNU diffutils 3.4に追加されました(2016-08-08)
これは、diff
ほとんどのディストリビューションでのデフォルトの実装であり、間もなく導入されます。
Ubuntu 18.04にはdiffutils
3.6が含まれているため、これが含まれています。
3.5では次のようになります。
テスト済み:
diff --color -u \
<(seq 6 | sed 's/$/ a/') \
<(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')
どうやらコミットc0fa19fe92da71404f809aafb5f51cfd99b1bee2(2015年3月)に追加されました。
単語レベルの相違
のようにdiff-highlight
。可能ではないようです、機能のリクエスト:https : //lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html
関連スレッド:
ydiff
ただし、以下を参照してください。
ydiff
横並びの単語レベルの相違
https://github.com/ymattw/ydiff
これはニルヴァーナですか?
python3 -m pip install --user ydiff
diff -u a b | ydiff -s
結果:
行が狭すぎる場合(デフォルトは80列)、次のように画面に合わせます。
diff -u a b | ydiff -w 0 -s
テストファイルの内容:
a
1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20
b
1
2
3
4
5 the original line teh original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the origlnal line
16
17
18
19
20
ydiff
Git統合
ydiff
構成を必要とせずにGitと統合します。
の代わりにgitリポジトリ内からgit diff
、次の操作を実行できます。
ydiff -s
の代わりにgit log
:
ydiff -ls
参照:「git diff」を実行するときに、どうすれば並べてdiffを取得できますか?
Ubuntu 16.04、git 2.18.0、ydiff 1.1でテスト済み。
There is no word-highlighting, yet
-更新はありますか?これが私がこの質問に出てきた理由です(grep --color
-like diff出力が必要です)。
git diff --color
動作します。sshで作業するときに役立ちます。
diff --color=always | less -R
そして、あなたの直接の制御を超える非常識な制約が原因でa yum install colordiff
またはan apt-get install colordiff
がオプションではない場合、または単に気が狂っている場合は、sedの行でホイールを再発明できます。
sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'
それをシェルスクリプトにスローし、統合されたdiff出力をパイプします。
ハンクマーカーを青色にして、新しい/古いファイル名と追加/削除された行をそれぞれ緑色と赤色の背景で強調表示します。1 そして、末尾のスペース2の変更がcolordiffよりもすぐにわかります。
1ちなみに、ファイル名を変更された行と同じように強調表示する理由は、ファイル名と変更された行を正しく区別するために、正規表現に取り組むものではないdiff形式を適切に解析する必要があるためです。それらを同じように強調表示すると、視覚的に「十分に機能」し、問題は簡単になります。とはいえ、いくつかの興味深い微妙な点があります。
2しかし、末尾のタブではありません。どうやらタブは、少なくとも私のxtermでは、背景が設定されていないようです。ただし、タブとスペースの変更が少し目立ちます。
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(より良い方法があると思いますが)。
colordiffを使用するようにsubversion設定を変更できます
〜/ .subversion / config.diff
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff
着色、単語レベルの diff
出力に含ま
以下のスクリプトとdiff-highlightでできることは次のとおりです。
#!/bin/sh -eu
# Use diff-highlight to show word-level differences
diff -U3 --minimal "$@" |
sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
diff-highlight
(強調表示のための@retracileの回答のクレジットsed
)
vim
、diffcharなどのプラグインを使用します。
私の使用grc
あなたが含むコマンドの数の出力を着色することができます(ジェネリックColouriser)、 diff
。
任意のコマンドをラップできるpythonスクリプトです。したがって、を呼び出す代わりにdiff file1 file2
、grc diff file1 file2
色付きの出力を表示するために呼び出します。簡単diff
にgrc diff
するために別名を付けました。
fork()
WSLで動作する可能性が高いですが、呼び出しのためにmingw / cygwinのあるWindowsでは動作しません。
ここで呼び出すことが別の解決策であるsed
色を表示するための適切なANSIエスケープシーケンスを挿入する+
、-
および@
それぞれ、赤色、緑色、及びシアンのラインは。
diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"
この質問に対する他の解決策とは異なり、この解決策はANSIエスケープシーケンスを明示的に示していません。代わりに、tput setaf
およびtput sgr0
コマンドを呼び出して、ANSIエスケープシーケンスを生成し、それぞれ適切な色を設定し、端末属性をリセットします。
の各引数に使用できる色を確認するには、tput setaf
次のコマンドを使用します。
for i in {0..255}; do tput setaf $i; printf %4d $i; done; tput sgr0; echo
出力は次のようになります。
tput setaf
and tput sgr0
コマンドが適切なANSIエスケープシーケンスを生成するという証拠です。
$ tput setaf 1 | xxd -g1
00000000: 1b 5b 33 31 6d .[31m
$ tput setaf 2 | xxd -g1
00000000: 1b 5b 33 32 6d .[32m
$ tput setaf 6 | xxd -g1
00000000: 1b 5b 33 36 6d .[36m
$ tput sgr0 | xxd -g1
00000000: 1b 28 42 1b 5b 6d .(B.[m
wdiff
は挿入と削除の両方の最初と最後の文字列を指定する引数を受け入れるため、これらの文字列としてANSIカラーシーケンスを使用できます。
wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2
たとえば、これは2つのCSVファイルを比較した出力です。
https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.htmlの例
colordiff
現在(1.0.16)はを理解wdiff
しているので、単にパイプすることもできます:wdiff -n f1 f2 | colordiff
。wdiff
diffutilsにマージする必要があります...
diff-so-fancyを試してみることをお勧めします。私は仕事中にそれを使用し、今のところ確かに素晴らしいようです。それは多くのオプションが満載されており、あなたが望むようにあなたの差分を設定することは本当に簡単です。
次の方法でインストールできます。
sudo npm install -g diff-so-fancy
またはMacの場合:
brew install diff-so-fancy
その後、次のように差分を強調表示できます。
diff -u file1 file2 | diff-so-fancy
Ubuntuの最新バージョンのgitでは、次のコマンドでdiff-highlightingを有効にできます。
sudo ln -s /usr/share/doc/git/contrib/diff-highlight/diff-highlight /usr/local/bin
sudo chmod a+x /usr/share/doc/git/contrib/diff-highlight/diff-highlight
そして、これをあなたに追加します.gitconfig
:
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
スクリプトが他のディストリビューションのどこかにある可能性があります。どこにあるかlocate diff-highlight
を調べるために使用できます。