如何配置Mac OS X终端使git有颜色?

206

我在网上看到过一个Mac OS X git演示,其中配置了多种颜色。

例如,他的提示符是琥珀色,他的ls目录是紫色,他的git diff输出有大约4种颜色(粉色、淡绿色、红色、淡黄色)。

你能告诉我如何配置Mac OS X终端才能达到这个效果吗?一定是Mac OS X Terminal.app,而不是iTerm。


3
除了superuser.com仍处于私有测试版本且yinglcs可能无法访问之外,没有其他内容需要说明。 - Fredrik
3
也许不是所有用户都知道这个,因为在superuser.com上并没有链接指向该帖子,当问题被迁移过去后,用户不一定会发现它(如果有的话,我没找到)。 - Fredrik
这个代码片段提供了一个适用于OSX上Git颜色配置的好方法:https://gist.github.com/trey/2722934 - gideon
3
又有一个有用的问题被关闭了。幸运的是,在一些人回答之前。 - Ben Thurley
2
现在已经被广泛认可,Git相关问题是属于主题范围内的;@casperOne在这里关闭是错误的,我已经投票要求重新开放。 - Mark Amery
显示剩余2条评论
6个回答

398

William Purcell的答案只允许'git diff'命令显示颜色。如果要为所有git命令启用颜色,请执行以下操作:

$ git config --global color.ui true

1
纯粹的完美。谢谢您先生。 - Brandon Buck
1
你可以在这里查看更丰富的选择:https://gist.github.com/trey/2722934 - Yannis Dran
@yinglcs,快点接受这个答案吧,好不好?! - Eliran Malka
5
这不起作用。 - KansaiRobot

59

要在 git diff 的输出中显示颜色,您需要配置 git。尝试运行:

$ git config --global color.diff true

设置您的 $HOME/.gitconfig 文件。


威廉,是的!这就是我所缺少的。 - avernet

15
这就是我在.profile文件中使用的内容。它非常好用,因为它让我可以通过颜色来看到当前的git分支以及它的状态。如果你想修改它,请注意重要的是转义颜色代码,以避免在长行中出现换行问题。
# Setting GIT prompt
c_cyan=`tput setaf 6`
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_sgr0=`tput sgr0`

branch_color ()
{
    if git rev-parse --git-dir >/dev/null 2>&1
    then
        color=""
        if git diff --quiet 2>/dev/null >&2 
        then
            color=${c_green}
        else
            color=${c_red}
        fi
    else
        return 0
    fi
    echo -n $color
}

parse_git_branch ()
{
    if git rev-parse --git-dir >/dev/null 2>&1
    then
        gitver="["$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')"]"
    else
        return 0
    fi
echo -e $gitver
}

#It's important to escape colors with \[ to indicate the length is 0
PS1='\u@\[${c_red}\]\W\[${c_sgr0}\]\[\[$(branch_color)\]$(parse_git_branch)\[${c_sgr0}\]$ '

你提到的是哪个.profile文件? - Darshan Puranik
@DarshanPurani,我是想说我的$bash中的.profile文件。 - Marc M

13

通常情况下,你不需要配置终端进行此操作... 终端无法意识到自己正在显示什么内容,但如果您在使用bash,则可以尝试在shell中执行以下操作(在某些其他shell中,您不需要导出,而是调用setenv或其他指令):

export CLICOLOR=1
export TERM=xterm-color

您可以使用LSCOLORS generator设置一些内容,然后可以使用类似以下的导出内容:

export LSCOLORS=fxfxcxdxbxegedabagacad

(上面的代码应该让你得到紫色的目录)

当你完成并对结果感到满意后,将这三行添加到/etc/bashrc或用户主目录中的.bashrc文件中。

编辑:此外,在终端中,确保选中“显示ANSI颜色”复选框(位于“文本”页面)。


.bashrc也可以吗?在我的Mac上是.bash_profile,我知道在Linux上是.bashrc,但我想因为整个BSD的事情,在mac上可能会有所不同(另外,在Linux和BSD / Mac上,LSCOLORS也不同,似乎)。 - Jorge Israel Peña
“.bashrc 对我有用……而且,它是不同的。gls 使用 LS_COLORS(也可以使用链接页面生成)。” - Fredrik
谢谢。但是如何配置提示或ls输出的颜色,例如“小麦”、“紫色”? 或在“git diff” 输出中使用“粉色”。 谢谢。 - yinglcs
可能的颜色是您可以在我链接的网站上找到的那些,它是标准的一部分,当他们定义它时,如果您有一个能够显示16种颜色的终端,您会感到高兴。 - Fredrik

2
打开终端应用程序,然后通过菜单(终端 -> 首选项)或按下 Command+, 打开首选项对话框。打开首选项对话框后,从左侧窗格中选择终端样式,从按钮栏中选择文本,然后确保选中“显示 ANSI 颜色”复选框。
这将启用终端上的颜色。要在终端输出中获得颜色,您需要在发送到终端的数据中嵌入 ANSI 颜色命令。如何完成取决于命令。例如(如上所示),ls 命令有一个颜色选项。有关颜色代码,请搜索“ansi color”。

请注意,该问题已被关闭,因为它不属于讨论范围。 :) - Ryan Kohn

0

如果你想要彩色的ls输出,我建议安装gnu coreutils并使用该版本的ls。对于任何版本的ls,你都需要传递正确的标志给它,gnu版本是--color,标准OS X版本是-G。所以你可以这样做:

alias ls='ls --color'

在你的 .bashrc 文件中。

要为你的提示符添加颜色,你需要使用适合你终端的正确颜色代码,但我的终端使用的是

PROMPT="$(print '%{\e[0;38m%}%{\e[1;1m%]%}[%m:%c] %n%%%{\e[0m%}') "

生成

[hostname:directory] username%

以粗体白色显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接