OS X终端配色方案

539
我之前使用 Ubuntu Linux,现在换成了 Mac。其中一个问题是终端窗口中缺少颜色,例如运行 ls -lagit status 时 Linux 终端中显示的颜色。请问如何在 Mac 终端激活颜色?请注意确保不改变原来的意思。

10
可能是如何配置Mac终端以获得彩色ls输出的重复问题。 - Roger Pate
40
被标记为“话题不相关”,但看看标签:osx、shell、终端、颜色……在我看来这完全是相关的。涉及OSX,关于shell,使用终端并想要添加颜色。需要编辑bash配置文件,所以我认为这是相关的。 - Danijel-James W
15
明确地说,这是关于Bash脚本编写的话题。 - superluminary
7
关闭?你在开玩笑吧!很明显,这对许多(主要是新手)Mac编码人员具有实用价值。如果那些关闭话题的人是认真的,为什么不迁移到SE Think Different呢?我理解SO支持在其他SE群组中使用该功能。 - Cam_Aust
7个回答

804

以下是我找到的一种方案,可以启用全局终端颜色

在您的主目录下编辑.bash_profile(自OS X 10.8起) - 或(对于10.7及更早版本):.profile.bashrc/etc/profile(取决于可用性),添加以下代码:

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

CLICOLOR=1 只是启用终端的颜色。

LSCOLORS=... 指定如何着色特定项目。

编辑完.bash_profile后,请打开终端并通过执行以下命令来强制更改生效:

source ~/.bash_profile

然后前往 Terminal > Preferences,点击 Profiles 选项卡,进入 Text 子选项卡,选中 Display ANSI Colors 选项。

在 Sierra(2017年5月)上经过验证。


21
我把它添加到了 .bash_profile 文件中,这样就可以用了。但把它加到 .profile 文件里却行不通。谢谢! - Morten
3
针对@Morten和其他在处理bash个人配置文件时遇到问题的人,请参考以下链接的答案,其中包含解释和解决方案:https://dev59.com/MGsz5IYBdhLWcg3wmpL0#7780055,http://superuser.com/a/244990。 - Cam Jackson
4
“dotfiles/.aliases”(https://github.com/mathiasbynens/dotfiles/blob/master/.aliases)中有一个很棒的“export LS_COLORS”语句。 - bobobobo
26
如果你想使用Linux的相同颜色(至少Debian和Ubuntu),请使用LSCOLORS = ExGxFxdxCxDxDxxbaDecac - remram
2
我使用搭载macOS Monterey的Mac M1 Pro电脑,需要编辑的文件是~/.zprofile。 - Lucas Bodin
显示剩余10条评论

136
您可以在其中一个启动脚本中使用基于Linux的语法。 我刚在OS X Mountain Lion上测试了这一点。 例如,在您的~/.bash_profile中可实现此功能。
export TERM="xterm-color" 
export PS1='\[\e[0;33m\]\u\[\e[0m\]@\[\e[0;32m\]\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]\$ '

这会给你一个漂亮的有颜色的提示符。要添加有颜色的ls输出,您可以添加alias ls="ls -G"

进行测试,只需运行source ~/.bash_profile以更新当前终端。

关于颜色的注释: 颜色前面是转义序列\e,由颜色值定义,组成[style;color+m]并包在一个转义[]序列中。 例如:

  • 红色 = \[\e[0;31m\]
  • 粗体红色(样式1) = \[\e[1;31m\]
  • 清除颜色 = \[\e[0m\]

我总是在root的.bash_profile中添加略微修改过的颜色方案,使用户名变为红色,这样我就可以清楚地看到自己是否作为root登录(如果我打开了多个终端窗口,则非常方便避免错误)。

/root/.bash_profile中:

PS1='\[\e[0;31m\]\u\[\e[0m\]@\[\e[0;32m\]\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]\$ '

对于我在线上所有SSH账户,我确保将主机名设置为红色,以区分本地终端和远程终端。只需编辑服务器上您家目录中的.bash_profile文件。如果服务器上没有.bash_profile文件,则可以创建它,然后在登录时应被源化。

如果这对您不起作用,请阅读下面一些评论,因为我很少使用MacOS..

如果要在远程服务器上执行此操作,请检查~/.bash_profile文件是否存在。如果不存在,只需创建它,它应该会在下次登录时自动获得源。


2
你如何在线编辑SSH账户的bash_profile? - Andrew
1
我更喜欢将$PWD用于PS1,而不是\u,如下所示:PS1=\[\e[0;31m\]$PWD\[\e[0m\]@\[\e[0;32m\]\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]\$ - cregox
1
以下是有关提示符代码的更多解释:https://wiki.archlinux.org/index.php/Color_Bash_Prompt#Step_by_step。 - JohnK
1
这些链接也可能会有所帮助:ANSI颜色代码转义序列更多关于PS1代码的内容 - JohnK
1
我在El Capitan(OS X 10.11)中使用这些颜色代码时,遇到了PROMPT_COMMAND颜色显示不正确的问题。结果发现,在PROMPT_COMMAND中使用时,需要使用\033语法而不是\e。例如,在提示符之前添加一个带颜色的时间戳(将其包含在您的~/.bashrc~/.bash_profile中):PROMPT_COMMAND="${PROMPT_COMMAND}; echo; echo -e '\033[0;35m'\[\$(date +%F\ %T)\]'\033[m'" - user5359531
显示剩余4条评论

46

MartinVonMartinsgrün和4Levels的方法已经确认在Mac OS X Mountain Lion上非常有效。

我需要更新的文件是~/.profile。

然而,我不能不推荐我的最爱应用程序iTerm 2

iTerm 2可以从文件中加载全局颜色方案。非常容易尝试和测试许多色彩方案。

这是iTerm 2窗口和颜色偏好设置的屏幕截图。 iTerm2 Color Preferences Screenshot Mac

一旦我将以下内容添加到我的~/.profile文件中,iTerm 2就能够重写颜色。

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

这里有一个非常棒的代码库,其中包含一些不错的预设:

mbadolato在Github上的iTerm2配色方案

额外福利:选择“使用系统范围的热键显示/隐藏iTerm2”,并使用BetterTouchTool将按键绑定到鼠标手势,以便通过手势立即隐藏/显示终端。


1
iTerm2 在我的系统上经常崩溃,所以我转而使用 oh-my-zsh https://github.com/robbyrussell/oh-my-zsh。此外还有可用的主题。 - 0xPixelfrost
嗨!请将“baskerville”链接更改为正确的链接。看起来复制粘贴有误。 - Jevgeni Smirnov
@NickWoodhams,你在截图中使用的颜色主题是什么? - Indradhanush Gupta
1
@IndradhanushGupta 我不确定那是什么颜色方案,那是一段时间之前的事了。但现在我正在使用Pure ZSH主题,并且非常喜欢它。https://github.com/sindresorhus/pure - Nick Woodhams
1
这是一个不错的配色方案,正是我需要检查项目类型、目录等的。 - rio
欣喜地包含图片 - wfbarksdale

19

如果希望在终端中ls命令的输出带有颜色,需要编辑你的~/.bash_profile文件,并添加以下行(如果还没有写过):

source .bashrc

然后您编辑或创建~/.bashrc文件,并为ls命令编写一个别名:

alias ls="ls -G"

如果您已经启动终端,请在终端中键入source .bashrc,或者只需打开一个新终端。

如果您想在ls中获得更多选项,请阅读手册(man ls)。选项与GNU / Linux系统中的不完全相同。


6
一种更好的选择是用“export CLICOLOR=" "”替换“alias”定义。这样做的好处通常是,即使在终端会话期间切换Shell(只要环境变量被继承),它仍然可以继续工作,而别名则不能。 - Ned Deily

7
如果你使用的是tcsh,那么请编辑你的~/.cshrc文件,并添加以下内容:
setenv CLICOLOR 1
setenv LSCOLORS dxfxcxdxbxegedabagacad

就像Martin所说的那样,LSCOLORS指定了您想要使用的颜色方案。

要生成您想要使用的LSCOLORS,请查看此网站


4
自2003年10月以来,bash一直是OS X的默认shell。 - nelsonjchen
1
我认为你是正确的。我刚刚买了一台新的Mac,它默认使用bash。我猜IT部门一直在设置我的工作用Mac默认使用tcsh。 - user937726
2
这个链接真的很棒! - Sankalp

4

检查 $TERM 的值:我的是 xterm-color,然后运行 ls -alG 命令会以彩色输出。


在Capitan上,使用xterm-256color时,我无法获得颜色。 CLICOLORLSCOLORS也无法改变这一点 ): - drevicko

2

在实验室里工作时,我能够通过使用终端(而不是X11)并编辑配置文件(从Mac菜单栏中)来获取终端颜色。界面上的设置有点奇怪,但你需要将修改后的主题设置为默认值。

进一步的设置可以通过编辑.bashrc文件来完成。


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