不能保留彩色输出?


Answers:


359

采用:

git diff --color=always | less -r

--color=alwaysgit即使输出是管道(不是tty),也可以告诉您输出颜色代码。并-r告诉less您解释这些颜色代码和其他转义序列。使用-R仅ANSI颜色代码。


3
@ ripper234。使用最新的git,git config color.ui true应该足以获得彩色输出,自动为长输出运行寻呼机。
斯蒂芬·吉梅内斯

4
与此问答同时进行的是,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选项,则只需在less提示符下键入“ -r”即可。当然,这可以使用大多数或所有较少的选项(例如,-i打开ignorecase)。
haridsv

3
grep --color=always以相同的方式工作。这不是该问题或答案的一部分,但是我是通过谷歌搜索该问题而来到这里的。
弗兰克·布莱斯

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
此选项(使颜色和使用“少-r”作为您的寻呼机默认情况下)用color.ui true做像命令对应的工作git -p diffgit -p status(这里-p指管所有的输出到$寻呼机,默认情况下它是less)即使对于老版本的git的(例如,Git 1.7.1)。但是,color.ui always当您直接指定git status | less -r或时,仍然需要(告诉git输出颜色代码“即使输出是管道(不是tty)”)来获得彩色输出git diff | less -r。当您明确指定输出重定向时,退出分页器后将看不到输出。
kenichi

29

使用-r--raw-control-chars)选项减少或减少-R(仅ANSI转义序列)。

我为此有一个别名 ~/.bashrc

alias rless='less -r'

7
其实我只是做了alias less='less -r'。有没有理由吗?
ripper234 2011年

3
@ ripper234:我隐约记得在某些情况下,-r当不需要时使用会导致可视化问题。
enzotib

1
例如,当您ackless -r他人打烟斗时输了回
新亚历山大

6
\less如果可视化混乱,则可以使用。
Brian Peterson

4
呃,您不必less为任何别名$LESSlessexport LESS='-MRq -z-2 -j2’
起名


10

只是在“ use less -r”上添加另一个版本:

使用具有值r的环境变量LESS(或将r添加到已经存在的值中)

例如,当我在.bashrc中使用它时

  export LESS=-Xr

(X退出较少时,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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.