diff
nie można wyprowadzać kolorów, potrzebny jest inny program, na przykład colordiff
do tego. Kolory w terminalu są drukowane za pomocą kodów ucieczkowych ANSI, które mniej nie interpretuje domyślnie. Aby less
poprawnie pokazać kolory, potrzebujesz przełącznika: -r
a nawet lepiej -R
:
colordiff -- "$file1" "$file2" | less -R
Od 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.
Możesz też użyć tej opcji, more
która domyślnie wyświetla kolory poprawnie.
Jeśli nie możesz zainstalować programów zewnętrznych, powinieneś być w stanie uzyskać to samo wyjście, stosując bardziej ręczne podejście:
diff a b |
perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"}
elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
less -RM +Gg
: superuser.com/questions/64972/…Inne odpowiedzi tutaj mogą być nieaktualne. Od coreutils 3.5
diff
może rzeczywiście generować kolorowe wydruki, które są domyślnie wyłączone, gdy standardowe wyjście nie jest konsolą.Ze strony podręcznika:
Aby wymusić wyświetlanie kolorów, gdy standardowe wyjście jest potokiem,
diff --color=always -- "$file1" "$file2" | less -R
powinno działać.źródło
alias diff='diff --color=always'
do pliku.bashrc
lub.zshrc
.alias diff='diff --side-by-side --left-column --color=always'
alias diff='/usr/bin/diff --color=always '
ialias less='/usr/bin/less -r '
choć diff jest początkowo kolorowy na pierwszych stronach mniejszych, ale na długich różnicach czasami wraca do mono. Może to dotyczyć skoków, które wyraźnie nie wpłynęłyby na różnicę, ponieważ jego wynik jest generowany tylko raz i nie musi skakać, ale w jakiś sposób traci kolory.Aby zmienić kolor rury na mniejszy:
Aby uczynić go bardziej czytelnym, ograniczając go do jednego ekranu:
I, aby mniej wyświetlać się, jeśli zawartość ma tylko jeden ekran:
-F powoduje, że less zamyka się natychmiast, jeśli jest mniej niż jeden ekran z treścią, rura do stderr jest taka, że gdy mniej zamyka, tracisz wyjście - przez potokowanie do stderr, uzyskuje wyjście, nawet jeśli less nie wyświetla się.
Alternatywnym (i moim zdaniem lepszym) sposobem jest po prostu użycie opcji -X, aby uniknąć mniejszego czyszczenia ekranu:
Działa to dla mnie dobrze, ale może być specyficzne dla bash. colordiff nie jest wbudowany, ale można go łatwo zainstalować.
źródło
less -r