git中的ANSI颜色未正确显示

时间:2011-12-13 04:02:28

标签: git bash

最近,我切换到了SLES 11.我发现了git命令的问题。无法呈现所有ANSI颜色。相反,它显示如下的ANSI代码:

* ESC [33m *提交0a02124a0fd85c1f0094bcdf15bac1645e3c8630ESC [m

注意:'ls'中的ansi颜色效果非常好。

8 个答案:

答案 0 :(得分:64)

尝试设置LESS环境变量以包含-R选项:

LESS=-R git grep ...

如果此方法有效,请将export LESS=-R添加到~/.bashrc~/.profile或类似的shell启动文件中。

   -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

答案 1 :(得分:27)

正如其他人所指出的那样,问题是你的终端没问题,但是当Git调用寻呼机时,它并没有正确解释ANSI颜色代码。

我从您环境中的取消设置 LESS开始;听起来你可能以前把它设置为模糊Git需要的东西。如果这解决了,那就是你。如果您真的必须自定义LESS,请注意Git默认以FRSX开头,因此如果您不需要,请务必更改这些内容。

如果 因任何原因希望你的环境中的LESS与你想要的Git不同,那么处理Git和寻呼机的理想方式就是通过{{1}配置变量。引用联机帮助页:

  

git将用于分页输出的命令。可以使用GIT_PAGER环境变量覆盖。请注意,如果在运行寻呼机时未设置LESS,则git会将LESS环境变量设置为FRSX。可以通过将LESS变量设置为其他值来更改这些设置。或者,可以通过设置core.pager选项在项目或全局基础上覆盖这些设置。设置core.pager对上面的LESS环境变量行为没有影响,所以如果你想以这种方式覆盖git的默认设置,你需要明确。例如,要以向后兼容的方式禁用S选项,请将core.pager设置为core.pager。这将通过git传递给shell,它会将最终命令转换为less -+$LESS -FRX

结合对所需选项的一些了解,可以让你达到你想要的目标。 (这种花哨的向后兼容方法可以通过禁用当前LESS=FRSX less -+FRSX -FRX中的所有选项,然后将其添加回您想要的选项。)

答案 2 :(得分:19)

在git中,您可以更改寻呼机以使用-R选项:

git config --global core.pager "less -R"

答案 3 :(得分:6)

对我来说,这不起作用:

git config --global core.pager less -R

所以我将以下内容添加到我的〜/ .gitconfig文件

 [core]
     pager = less -R

为了测试它我做了

git log --graph --pretty=format:"%C(yellow)%h%Creset%C(blue)%d%Creset %C(white bold)%s%Creset %C(white dim)(by %an %ar)%Creset" --all

答案 4 :(得分:4)

好的,我明白了。这个问题与变量LESS有关。

以下行解决了这个问题:

export LESS="-erX"

答案 5 :(得分:1)

我遇到了同样的问题。但为什么我需要在一台机器上配置一个git而在另一台机器上不需要?我想解决问题的根源,因为

  

git config --global core.pager“less -R”

对我来说,

看起来像是一种解决方法。

答案 6 :(得分:0)

我在Laravel Artisan和Symfony控制台的Git for Windows v2.7.1中遇到了与ANSI颜色转义序列类似的问题。这里提到的LESS解决方案并没有解决问题。

由于Git for Windows使用bash --login -i打开终端,因此在终端启动后输入的这一行为我工作了:

bash

答案 7 :(得分:0)

无论谁在这里结束,对于我而言,都可以通过将core.pager设置为空字符串而不是取消设置来解决:

git config --global core.pager ''

这是来自https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration