[unix] 명령 줄에서 diff를 색칠하는 방법은 무엇입니까?

diff가있을 때 색상이 좋아 보이도록 어떻게 채색 할 수 있습니까? 커맨드 라인을 원하므로 GUI 솔루션을 사용하지 마십시오.



답변

매뉴얼 페이지 diff는 내부에서 채색에 대한 해결책이 없음 을 제안합니다. 사용을 고려하십시오 colordiff. diff가독성을 높이기 위해 색상이 지정된 구문 강조 표시를 사용하여 출력을 늘리는 것을 제외하고 diff와 동일한 출력을 생성 하는 래퍼 입니다.

diff old new | colordiff

또는 그냥 :

colordiff old new

설치:

  • 우분투 / 데비안 : sudo apt-get install colordiff
  • OS X : brew install colordiff또는port install colordiff

답변

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


답변

실제로 또 다른 옵션이있는 것 같습니다 (위에서 설명한 문제가 발생할 때 최근에 나타났습니다).

git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>

Git을 가지고 있다면 (어쨌든 이미 사용 중일 수 있습니다), 파일 자체가 버전 제어를받지 않아도 비교를 위해 사용할 수 있습니다. 기본적으로 사용하도록 설정되어 있지 않은 경우 여기에서 색상 지원을 사용하는 것이 이전에 언급 된 일부 해결 방법보다 훨씬 쉬운 것으로 보입니다.


답변

diff --color 옵션이 GNU diffutils 3.4에 추가되었습니다 (2016-08-08)

이것은 diff대부분의 배포판 에서 기본 구현이며 곧 제공 될 것입니다.

우분투 18.04는 diffutils3.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

테스트 파일의 내용 :

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

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 힘내 통합

ydiff 별도의 구성없이 Git과 통합됩니다.

대신 git 저장소 내부 git diff에서 다음을 수행 할 수 있습니다.

ydiff -s

대신에 git log:

ydiff -ls

참조 : 나는 “자식은 diff”할 때 어떻게 나란히 DIFF을받을 수 있나요?

Ubuntu 16.04, git 2.18.0, ydiff 1.1에서 테스트되었습니다.


답변

그리고 즉각적인 통제를 넘어 미친 제약으로 인해 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에서 탭이 배경을 설정하지 못합니다. 탭 대 공간 변경은 눈에 띄게 만듭니다.


답변

colordiff를 사용하도록 서브 버전 구성을 변경할 수 있습니다

~ / .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

경유 : https://gist.github.com/westonruter/846524


답변

컬러, 단어 수준 diff 출력

아래 스크립트와 diff-highlight로 할 수있는 작업은 다음과 같습니다 .

컬러 diff 스크린 샷

#!/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 )