สามารถรักษาเอาต์พุตสีได้น้อยลงหรือไม่?


310

ฉันจะได้รับน้อยลงไม่ให้ขาวดำเอาท์พุท?

เช่นผลลัพธ์ที่ออกมาgit diffเป็นสี แต่git diff | lessไม่ใช่



1
เอกสารที่เกี่ยวข้อง แต่ไม่เหมือนกัน ลิงค์เป็นเรื่องเกี่ยวกับlessเท่านั้น
Abel Cheung

คำตอบ:


360

ใช้:

git diff --color=always | less -r

--color=alwaysจะมีการบอกgitรหัสสีเอาท์พุทแม้ว่าการส่งออกเป็นไพพ์ (ไม่ใช่ tty) และ-rจะมีการบอกlessให้ตีความรหัสสีเหล่านั้นและลำดับการหลีกเลี่ยงอื่น ๆ ใช้-Rสำหรับรหัสสี ANSI เท่านั้น


3
@ ripper234 ด้วย gits ที่ผ่านมาgit config color.ui trueควรจะเพียงพอที่จะรับเอาท์พุทสีและเรียกใช้เพจเจอร์สำหรับเอาต์พุตที่ยาว
Stéphane Gimenez

4
เมื่อเทียบกับ Q / A นี้watch --color 'git diff --cached --color=always'และเพื่อน ๆ สามารถนำความเจ๋ง ๆ เพิ่มเติมมาให้คุณได้
Alois Mahdal

27
ไม่ได้ใช้งานที่less -Rดีขึ้น (หรือexport LESS=Rใน/etc/profile)? เหตุใดคุณจึงอนุญาตให้แสดงอะไรก็ได้ยกเว้นลำดับหนีภัย "สี" ของ ANSI นอกจากนี้หน้าคนพูดWarning: 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
และหากคุณลืมระบุ-rตัวเลือกคุณสามารถพิมพ์ "-r" ที่lessพรอมต์ หลักสูตรนี้ใช้ได้กับตัวเลือกส่วนใหญ่หรือตัวเลือกที่น้อยกว่า (เช่น-iเพื่อเปิดใช้การเพิกเฉย)
haridsv

3
grep --color=alwaysทำงานในลักษณะเดียวกัน นี่ไม่ใช่ส่วนหนึ่งของคำถามหรือคำตอบนี้ แต่ฉันมาที่นี่จาก googling เกี่ยวกับคำถามนั้นจึงมี
Frank Bryce

57

ตัวเลือกอื่นคือการเปิดใช้งานสีและใช้ 'less -r' เป็นเพจเจอร์ของคุณ

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

ผลลัพธ์นี้ใน

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

ใน ~ / .gitconfig ของคุณ

สำหรับข้อมูลเพิ่มเติมโปรดดูที่หนังสือ Pro Git


7
เมื่อใช้ Git 2.11 ฉันพบว่าใช้color.ui trueไม่ได้กับเพจเจอร์ แต่color.ui alwaysทำ สิ่งนี้อาจมีการเปลี่ยนแปลงตั้งแต่คำตอบถูกโพสต์
Tom Zych

1
ตัวเลือกนี้ (เพื่อเปิดใช้งานสีและใช้ 'less -r' เป็นเพจเจอร์ของคุณตามค่าเริ่มต้น) ด้วยการcolor.ui trueทำงานกับ comands เช่นgit -p diffและgit -p status(โดยที่-pหมายถึงlessไพพ์เอาท์พุททั้งหมดเป็น $ PAGER โดยค่าเริ่มต้น) แม้สำหรับ git รุ่นเก่า , Git 1.7.1) แต่คุณยังคงต้องcolor.ui always(ซึ่งบอกคอมไพล์รหัสสีเอาท์พุท "แม้ว่าการส่งออกเป็นท่อ (ไม่ TTY)") ที่จะได้รับการส่งออกสีเมื่อคุณระบุโดยตรงหรือgit status | less -r git diff | less -rเมื่อคุณระบุการเปลี่ยนเส้นทางผลลัพธ์อย่างชัดเจนคุณจะไม่เห็นผลลัพธ์หลังจากออกจากเพจเจอร์
kenichi

29

ใช้ตัวเลือก-r( --raw-control-chars) เพื่อน้อยกว่าหรือยัง-R(เฉพาะ ANSI escape sequences)

ฉันมีนามแฝงสำหรับสิ่งนี้ใน ~/.bashrc

alias rless='less -r'

7
ที่จริงฉันเพิ่งทำalias less='less -r'ไป เหตุผลใดที่จะไม่?
ripper234

3
@ ripper234: ฉันจำไม่ได้ว่าอาจมีกรณีที่ใช้-rเมื่อไม่จำเป็นอาจนำไปสู่ปัญหาการสร้างภาพ
enzotib

1
ตัวอย่างเช่นเมื่อคุณท่อackกับless -rคุณสูญเสียกลับสายการบิน
ใหม่ซานเดรีย

6
คุณสามารถใช้\lessถ้าการสร้างภาพข้อมูลเกิดความสับสน
Brian Peterson

4
เอ่อคุณไม่ต้องตั้งชื่อแทนlessอะไรเลยเพียงแค่ตั้งค่า$LESSตัวแปรสภาพแวดล้อมเป็นชุดธงที่คุณต้องการให้lessเช่นexport LESS='-MRq -z-2 -j2’
wjv

14

นอกจากนี้ยังtreeมีตัวเลือกในการบังคับให้สีบน:

tree -C | less -r

และเพื่อls:

ls -lR --color | less -r

10

เพียงเพิ่มรุ่นอื่นใน "use less -r":

ใช้ตัวแปรสภาพแวดล้อมน้อยด้วยค่า r (หรือเพิ่ม r ไปยังสิ่งที่มันมีอยู่แล้ว)

เช่นที่ฉันใช้ใน. bashrc ของฉัน

  export LESS=-Xr

(X หยุดหน้าจอจากการล้างเมื่อออกน้อยกว่า)


1
น่าเสียดายที่ -X แบ่งการเลื่อนเมาส์สำหรับฉันด้วย: c
Xerus


3

ฉันรู้ว่ามันเก่าและหลายคนได้ให้คำตอบที่ถูกต้องแล้ว แต่ฉันอยากจะเพิ่มว่ามันดีกว่าที่จะใช้เสมอless -Rและไม่ใช่less -rถ้าคุณต้องการสี ANSI เพียงอย่างเดียวเนื่องจาก-rอาจมีปัญหาในการแสดงอักขระ

จากคู่มือ:

   -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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.