Có thể giữ lại đầu ra màu?


Câu trả lời:


360

Sử dụng:

git diff --color=always | less -r

--color=alwayscó để nói gitvới mã màu đầu ra ngay cả khi đầu ra là một đường ống (không phải là tty). Và -rcó để nói lessđể giải thích các mã màu và các chuỗi thoát khác. Chỉ sử dụng -Rcho mã màu ANSI.


3
@ ripper234. Với các gits gần đây, git config color.ui truephải đủ để có được đầu ra màu để tự động chạy một máy nhắn tin cho đầu ra dài.
Stéphane Gimenez

4
Song song với Q / A này watch --color 'git diff --cached --color=always'và bạn bè của nó có thể mang đến cho bạn một số điều tuyệt vời.
Alois Mahdal

27
Không sử dụng less -Rtốt hơn (hoặc export LESS=Rtrong /etc/profile)? Tại sao bạn lại cho phép nó hiển thị bất cứ thứ gì ngoại trừ các chuỗi thoát "màu" ANSI? Ngoài ra, trang người đàn ông nóiWarning: when the -r option is used, less cannot keep track of the actual appearance of the screen (since this depends on how the screen responds to each type of control character). Thus, various display problems may result, such as long lines being split in the wrong place.
x-yuri

5
Và nếu bạn quên chỉ định -rtùy chọn, bạn chỉ cần gõ "-r" tại lessdấu nhắc. Điều này tất nhiên hoạt động với hầu hết hoặc tất cả các tùy chọn ít hơn (nghĩa là -iđể bật ignorecase).
haridsv

3
grep --color=alwayshoạt động theo cùng một cách. Đây không phải là một phần của câu hỏi hoặc câu trả lời này, nhưng tôi đã đến đây từ việc googling về câu hỏi đó vì vậy nó có.
Frank Bryce

57

Một tùy chọn khác sẽ là bật màu và sử dụng 'less -r' làm máy nhắn tin của bạn.

git config --global color.ui true
git config --global core.pager 'less -r'

Kết quả này trong

[color]
    ui = true
[core]
    pager = less -r

trong ~ / .gitconfig của bạn

Để biết thêm thông tin xem sách Pro Git .


7
Sử dụng Git 2.11, tôi thấy rằng color.ui truenó không hoạt động với máy nhắn tin, nhưng color.ui alwaysđã làm. Điều này có thể đã thay đổi kể từ khi câu trả lời được đăng.
Tom Zych

1
Tùy chọn này (để bật màu và sử dụng 'less -r' làm máy nhắn tin của bạn theo mặc định) với color.ui truecông việc cho các lệnh như git -p diffgit -p status( -pcó nghĩa là chuyển tất cả đầu ra thành $ PAGER, theo mặc định less) ngay cả đối với các phiên bản git khá cũ (ví dụ: , Git 1.7.1). Nhưng bạn vẫn cần color.ui always(thông báo cho git biết mã màu đầu ra "ngay cả khi đầu ra là một đường ống (không phải là tty)") để có được đầu ra màu khi bạn trực tiếp chỉ định git status | less -rhoặc git diff | less -r. Khi bạn chỉ định rõ ràng chuyển hướng đầu ra, bạn sẽ không thấy đầu ra sau khi thoát khỏi máy nhắn tin.
kenichi

29

Sử dụng tùy chọn -r( --raw-control-chars) để ít hơn hoặc cũng có thể -R(chỉ các chuỗi thoát ANSI).

Tôi có một bí danh cho điều này trong ~/.bashrc

alias rless='less -r'

7
Thật ra tôi vừa mới làm alias less='less -r'. Có lý do nào không?
ripper234

3
@ ripper234: Tôi mơ hồ nhớ có thể có trường hợp khi sử dụng -rkhi không cần thiết có thể dẫn đến vấn đề hình dung.
enzotib

1
Chẳng hạn, khi bạn đi ackcùng less -rbạn bị mất tiền vận chuyển
New Alexandria

6
Bạn chỉ có thể sử dụng \lessnếu trực quan hóa gây rối.
Brian Peterson

4
Uh, bạn không cần phải bí danh lessđể bất cứ điều gì, chỉ cần thiết lập các $LESSbiến môi trường với tập hợp các cờ bạn luôn muốn cung cấp cho less, ví dụ nhưexport LESS='-MRq -z-2 -j2’
wjv

14

Cũng treecó một tùy chọn để buộc màu sắc trên:

tree -C | less -r

Và như vậy cho ls:

ls -lR --color | less -r

10

Chỉ cần thêm một phiên bản khác vào "sử dụng ít -r":

sử dụng biến môi trường LESS với giá trị r (hoặc thêm r vào bất cứ thứ gì nó đã có)

ví dụ: khi tôi sử dụng nó trong .bashrc của tôi

  export LESS=-Xr

(X dừng màn hình xóa khi thoát ít hơn)


1
thật không may -X cũng phá vỡ cuộn chuột cho tôi: c
Xerus


3

Tôi biết điều này đã cũ và nhiều người đã cung cấp câu trả lời đúng nhưng tôi muốn nói thêm rằng nó luôn luôn tốt hơn để sử dụng less -Rvà không phải less -rnếu bạn chỉ cần màu ANSI vì -rcó thể gặp vấn đề trong việc hiển thị các ký tự.

Từ hướng dẫn:

   -r or --raw-control-chars
          Causes "raw" control characters to be displayed.   The  default
          is  to display control characters using the caret notation; for
          example, a control-A (octal 001) is displayed as  "^A".   Warn‐
          ing:  when the -r option is used, less cannot keep track of the
          actual appearance of the screen (since this depends on how  the
          screen responds to each type of control character).  Thus, var‐
          ious display problems may result,  such  as  long  lines  being
          split in the wrong place.

   -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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.