나는 git diff를 사용해 왔으며 컬러 출력을 생성합니다. 그러나 특정 작업을 수행하려면 일반 diff를 사용해야 하며 색상 부족으로 인해 읽기 어려운 출력이 많이 생성된다는 사실을 이제 발견했습니다. diff가 읽기 쉬운 색상 출력을 생성하도록 하려면 어떻게 해야 합니까? 이상적으로는 대용량 파일을 쉽게 볼 수 있도록 동시에 적은 양으로 전송하는 것이 좋습니다.
답변1
diff
색상을 출력할 수 없습니다. 이를 위해서는 예를 들어 다른 프로그램이 필요합니다 colordiff
. 인쇄를 통한 터미널 색상ANSI 이스케이프 코드less는 기본적으로 해석되지 않습니다. less
색상을 올바르게 표시 하려면 스위치가 필요 -r
합니다 .-R
colordiff -- "$file1" "$file2" | less -R
에서 man less
:
-R or --RAW-CONTROL-CHARS
Like -r, but only ANSI "color" escape sequences are
output in "raw" form. Unlike -r, the screen appearance
is maintained correctly in most cases. ANSI "color"
escape sequences are sequences of the form:
ESC [ ... m
where the "..." is zero or more color specification
characters For the purpose of keeping track of screen
appearance, ANSI color escape sequences are assumed to
not move the cursor. You can make less think that
characters other than "m" can end ANSI color escape
sequences by setting the environment variable LESSAN‐
SIENDCHARS to the list of characters which can end a
color escape sequence. And you can make less think
that characters other than the standard ones may appear
between the ESC and the m by setting the environment
variable LESSANSIMIDCHARS to the list of characters
which can appear.
more
또는 기본적으로 색상을 올바르게 표시하는 명령을 사용할 수 있습니다 .
외부 프로그램을 설치할 수 없는 경우 보다 수동적인 접근 방식을 사용하여 동일한 출력을 얻을 수 있습니다.
diff a b |
perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"}
elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
답변2
여기에 있는 다른 답변은 오래되었을 수 있습니다. coreutils 3.5부터 diff
컬러 출력을 생성하는 것이 실제로 가능하며 표준 출력이 콘솔이 아닌 경우 기본적으로 꺼집니다.
매뉴얼 페이지에서:
--color[=WHEN]
출력을 색상화합니다. , 또는 (기본값)WHEN
일 수 있습니다.never
always
auto
강제 색상 출력은 표준 출력이 파이프일 때 diff --color=always -- "$file1" "$file2" | less -R
작동해야 합니다 .
답변3
색상 차이를 더 적게 파이프합니다.
diff $file1 $file2 | colordiff | less -r
더 읽기 쉽게 만들려면 단일 화면으로 제한하세요.
diff -uw $file1 $file2 | colordiff | less -r
그리고 콘텐츠 화면이 하나만 있는 경우 더 적은 내용이 표시되지 않습니다.
diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F
한 화면 분량의 콘텐츠보다 적은 경우 -F는 less가 즉시 종료되도록 하고 less가 종료될 때 출력이 손실되므로 stderr로 파이핑합니다. stderr로 파이핑하면 less가 표시되지 않더라도 출력을 얻게 됩니다.
또 다른 (제 생각에는 더 나은) 방법은 -X를 사용하여 화면이 덜 자주 지워지는 것을 방지하는 것입니다.
diff -uw $file1 $file2 | colordiff | less -r -X -F
이것은 나에게는 잘 작동하지만 bash에만 해당될 수 있습니다. colordiff는 내장되어 있지 않지만 설치가 쉽습니다.
답변4
나는 사용할 것이다즉흥 연주:
diff "$A" "$B" | riff
또는 diff
뒤에서 암시적으로 호출되는 내용은 다음과 같습니다.
riff "$A" "$B"
Riff는 어떤 행이 변경되었는지 알려줄 뿐만 아니라;라인의 어떤 부분이 변경되었나요?(아래 스크린샷 참조).
Riff는 기본적으로 동일한 방식으로 출력을 페이지 매김하므로 git
호출기 통합에 대해 걱정할 필요가 없습니다.
무엇보다도 Riff가 통합되어 git
있어 친구로부터도 이 결과를 얻을 수 있습니다 git diff
.
여기서 받으세요:https://github.com/walles/riff/releases/
면책조항: 제가 riff
직접 썼으니 당연히 추천합니다 :).