Git传呼机较少,但是是什么导致输出着色?


18

less根据此线程,它本身无法进行语法突出显示。

但是,可以git diff用较少的默认分页器很好地显示彩色输出。当我将的输出重定向git diff到文件中时,看不到颜色转义序列。

是否git diff知道它的发送位置,并相应地格式化输出?一个人怎么做?


我只是注意到git为diff输出(例如git diff)着色,但是,它通常不知道如何突出显示语法。例如

git show 415fec6:log.tex

没有启用任何类似TeX的语法。


阅读git源代码,我发现了以下提示

diff.h

int use_color;

我以前指的是语法突出显示,但这是不正确的。我的意思是输出着色,请参见例如

颜色输出示例


1
您是否有任何真正的语法高亮显示,或者删除和添加的行只有红色和绿色?
圣保罗Ebermann

顺便说一句:减少git着色:(git diff --color=always | less -rless -R用于ANSI)。顺便说一句:对于默认情况下不分页的其他命令(git diff确实),您可以将其打开:git -p some_git_command
hyperpallium

Answers:



11

运行:

git diff --color=always > output

显示颜色转义。

该死,我在gitcolor.c文件中找到了它:

static int check_auto_color(void)                                           
{                                                                           
  if (color_stdout_is_tty < 0)                                              
    color_stdout_is_tty = isatty(1);                                        
  if (color_stdout_is_tty || (pager_in_use() && pager_use_color)) {         
    char *term = getenv("TERM");                                            
    if (term && strcmp(term, "dumb"))                                       
      return 1;                                                             
  }                                                                         
  return 0;                                                                 
}  

3

less可以使用-r --raw-control-chars和支持颜色-R --RAW-CONTROL-CHARS

您可以使用Python pygmentize进行突出显示并将其插入。

要将其全部组合,请配置一个较少的过滤器,如超级用户所述


链接的确很有趣,谢谢。您知道是否git实际使用pygmentize吗?因为它没有被列为依赖项。
塞巴斯蒂安

顺便说一句,当我运行git diffless进程时,没有附加任何选项(也不-R-r)。但是,我不知道git是否以特殊方式调用它,因此args在中不可见htop
塞巴斯蒂安

git输出自己的颜色转义码。它也是用书面语言编写的,c因此添加Python将是一个巨大的依赖。它可能可以less通过环境进行控制
Matt

1
也许通过环境LESS变量?
马特

3
是的,LESS = FRX已添加到环境中(请参阅pager.c)。
ysdx 2014年
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.