diff가있을 때 색상이 좋아 보이도록 어떻게 채색 할 수 있습니까? 커맨드 라인을 원하므로 GUI 솔루션을 사용하지 마십시오.
diff가있을 때 색상이 좋아 보이도록 어떻게 채색 할 수 있습니까? 커맨드 라인을 원하므로 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
색상 을 사용 하여 이스케이프 시퀀스를 올바르게 표시하는 을 사용하여 덜 파이프로 파이프 할 수 있습니다 .
-y
수 있도록 옵션) ☹ vimdiff
아마 아래에 제안 더 나은 방법
colordiff
잘 작동합니다 svn diff | colordiff
(즉, 두 파일을 비교하는 것이 아니라 diff 만있는 상황).
-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 diff <(xxd file1) <(xxd filed)
는 작동하지 않습니다.
git help diff
. 따라서 git diff가 비어 있으면 cd
어디에서나 시도하십시오 .
git config color.diff auto
git diff --no-index
을 비교 하는 데 사용 하십시오.
diff --color
옵션이 GNU diffutils 3.4에 추가되었습니다 (2016-08-08)
이것은 diff
대부분의 배포판 에서 기본 구현이며 곧 제공 될 것입니다.
우분투 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
테스트 파일의 내용 :
ㅏ
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에서 테스트되었습니다.
There is no word-highlighting, yet
-업데이트? 이것이 내가이 질문에 왔던 것입니다 (나는 grep --color
같은 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 / 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)을 사용하십시오 .
여기에 원용는 또 다른 솔루션입니다 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
및 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
예를 들어 다음은 두 개의 CSV 파일을 비교 한 결과입니다.
https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html의 예
colordiff
now (1.0.16)은 이해 wdiff
하므로 파이프 : wdiff -n f1 f2 | colordiff
. wdiff
Diffutils의 병합해야 ...
나는 당신이 diff-so-fancy 를 시도해 볼 것을 제안합니다 . 나는 일하는 동안 그것을 사용하고 지금은 확실히 좋아 보인다. 많은 옵션이 포함되어 있으며 원하는 방식으로 diff를 구성하기가 정말 쉽습니다.
다음을 통해 설치할 수 있습니다.
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
. 어디를 찾을 수 있습니까?