巧用 iTerm2 & zsh & oh-my-zsh 打造炫酷的 MacOS 终端环境

MacOS 系统自带的 Bash 虽然已经很强大,但是对于一些细节功能的支持并不完美,重点是对于一个颜控来说,原生 Bash 真的很丑……可塑性也不高。本文将使用 iTerm2 这款被各路大牛吹爆的 MacOS 平台最好用终端结合 zsh 来打造一个炫酷的终端环境。最终效果大致如下:

Bash 与调整后的 iTerm2 对比 —— From AigeStudio

左边是原生 Bash 默认状态,右边是 iTerm2 做完整容手术后的样子。本文我们只整容,不介绍 iTerm2 和 zsh 的相关功能,关于这两者的强大功能你完全可以自窥对应的官方文档自行修炼。最后,你可能会问:问什么要这么炫酷的终端环境呢?这个问题的答案就好比为什么喜欢看帅气小伙或漂亮妹子一样简单~

安装 iTerm2

首先我们要做的当然是安装 iTerm2 啦,安装方式主要分为两种:

  1. 命令行安装
  2. 安装包安装

两者都可以安装 iTerm2 ,任选一种即可。

命令行安装

命令行安装主要是通过 brew 命令行工具进行,如果你尚未安装过 brew,那么请先参阅 MacOS 安装 brew 并配置 cask

安装 iTerm2 直接使用以下命令即可:

AigeStudio@aige$ brew cask instal iterm2

安装包安装

这个就很简单了,直接打开 iTerm2 官网下载安装即可。

配置 iTerm2

默认的 iTerm2 比较单调不怎么美观:

iTerm2 默认状态 —— From AigeStudio

我们可以通过一系列的设置更改它的色彩让其变得好看。

调整 iTerm2 色彩显示范围

在早期的 iTerm2 版本中其默认的色彩显示范围很窄,需要将其调整为更宽的色彩显示范围才能更好地展示自定的颜色,调整方式为进入 iTerm2 的 “Preferences->Profiles->Terminal”,将 “Report Terminal Type” 设置为 “xterm-256color”:

调整 iTerm2 色彩范围 —— From AigeStudio

在最近的一些更新版本中,iTerm2 已经将默认的 “Report Terminal Type” 值设置成了 “xterm-256color”,因此如果你用的 iTerm2 版本较新也许就不用更改啦。

更改 iTerm2 的 “Color Preset”

iTerm2 内置了几个不怎么好看的 Color Preset:

iTerm2 内置颜色预设 —— From AigeStudio

比如 iTerm2 默认的 “Dark Background” 颜色搭配就很生硬,庆幸的是 iTerm2 支持自己导入(或自己制作,如果你可以的话) Color Preset:

导入 iTerm2 颜色预设 —— From AigeStudio

网上有许多大牛制作的 “Color Preset” 库,大家可以直接下载导入到 iTerm2 中使用,这里爱哥使用的是 GitHub 上开源项目 iTerm2-Color-Schemes 里的 “Color Preset”。将 “iTerm2-Color-Schemes” 这个项目 Clone 下来后其目录结构如下:

开源项目 iTerm2-Color-Schemes 目录结构 —— From AigeStudio

我们这里只使用 “Color Preset”,这些 “Color Preset” 都存放在 “schemes” 目录下而 “screenshots” 目录下这是对应的预览图:

开源项目 iTerm2-Color-Schemes 预览图 —— From AigeStudio

随便挑选一个,比如这里爱哥选的是 “teerb”,记住这个预设名字,回到 “iTerm2的Preferences->Profiles”,选择 “colors” 标签:

iTerm2 颜色设置 —— From AigeStudio

然后选择右下角的 “Color Preset...”,在弹出的选择框中我们选择 “import...”,然后选中 “schemes” 目录中的 “teerb” 预设导入,导入的预设并不会直接使用:

iTerm2 导入颜色设置 —— From AigeStudio

还需要我们手动选择一下。应用成功后可以看到整个 iTerm2 终端窗口颜色改变说明修改成功:

导入 iTerm2 颜色设置成功 —— From AigeStudio

让 iTerm2 支持字符 Icon

为了让 iTerm2 显示特殊的 Icon 字符,我们还需安装特殊的字体,这类字体称为 “PowerLine Font”,还有可以支持比 “PowerLine Font” 更多字符字体的 “Nerd Font”,这里爱哥直接使用的 “Nerd Font”,安装后 iTerm2 显示效果如下图(注:下图是全部配置完成后的效果):

演示字符字体 —— From AigeStudio

字体的安装也可以分为两种形式:

  1. 命令行安装
  2. 字体文件直接安装

这里爱哥个人是比较倾向于推荐命令的方式安装的,因为字体与应用不同,应用在 MacOS 里面独立性比较强管理起来方便,字体虽说有专门的 “Font Book” 应用管理,但是使用起来远不如直接用 brew 管理方便。

字体文件直接安装

这种方式很简单,就是直接下载对应的字体文件双击安装即可,安装后的字体文件可通过 MacOS 自带的 Font Book 应用管理,这里不在赘述。

命令行安装

通过 brew 命令安装先以 “nerd” 作为关键词搜索相关资源:

AigeStudio@aige$ brew search nerd

homebrew/cask-fonts/font-3270-nerd-font
homebrew/cask-fonts/font-3270-nerd-font-mono
homebrew/cask-fonts/font-anonymouspro-nerd-font
homebrew/cask-fonts/font-anonymouspro-nerd-font-mono
homebrew/cask-fonts/font-arimo-nerd-font
homebrew/cask-fonts/font-arimo-nerd-font-mono
homebrew/cask-fonts/font-aurulentsansmono-nerd-font
homebrew/cask-fonts/font-aurulentsansmono-nerd-font-mono
homebrew/cask-fonts/font-bitstreamverasansmono-nerd-font
homebrew/cask-fonts/font-bitstreamverasansmono-nerd-font-mono
homebrew/cask-fonts/font-codenewroman-nerd-font
homebrew/cask-fonts/font-codenewroman-nerd-font-mono
homebrew/cask-fonts/font-cousine-nerd-font
homebrew/cask-fonts/font-cousine-nerd-font-mono
homebrew/cask-fonts/font-dejavusansmono-nerd-font
homebrew/cask-fonts/font-dejavusansmono-nerd-font-mono
homebrew/cask-fonts/font-droidsansmono-nerd-font
homebrew/cask-fonts/font-droidsansmono-nerd-font-mono
homebrew/cask-fonts/font-fantasquesansmono-nerd-font
homebrew/cask-fonts/font-fantasquesansmono-nerd-font-mono
homebrew/cask-fonts/font-firacode-nerd-font
homebrew/cask-fonts/font-firacode-nerd-font-mono
homebrew/cask-fonts/font-firamono-nerd-font
homebrew/cask-fonts/font-firamono-nerd-font-mono
homebrew/cask-fonts/font-go-mono-nerd-font
homebrew/cask-fonts/font-go-mono-nerd-font-mono
homebrew/cask-fonts/font-gohu-nerd-font
homebrew/cask-fonts/font-gohu-nerd-font-mono
homebrew/cask-fonts/font-hack-nerd-font
homebrew/cask-fonts/font-hack-nerd-font-mono
homebrew/cask-fonts/font-hasklig-nerd-font
homebrew/cask-fonts/font-hasklig-nerd-font-mono
homebrew/cask-fonts/font-heavydata-nerd-font
homebrew/cask-fonts/font-heavydata-nerd-font-mono
homebrew/cask-fonts/font-hermit-nerd-font
homebrew/cask-fonts/font-hermit-nerd-font-mono
homebrew/cask-fonts/font-inconsolata-nerd-font
homebrew/cask-fonts/font-inconsolata-nerd-font-mono
homebrew/cask-fonts/font-inconsolatago-nerd-font
homebrew/cask-fonts/font-inconsolatago-nerd-font-mono
homebrew/cask-fonts/font-inconsolatalgc-nerd-font
homebrew/cask-fonts/font-inconsolatalgc-nerd-font-mono
homebrew/cask-fonts/font-iosevka-nerd-font
homebrew/cask-fonts/font-iosevka-nerd-font-mono
homebrew/cask-fonts/font-lekton-nerd-font
homebrew/cask-fonts/font-lekton-nerd-font-mono
homebrew/cask-fonts/font-liberationmono-nerd-font
homebrew/cask-fonts/font-liberationmono-nerd-font-mono
homebrew/cask-fonts/font-meslo-nerd-font
homebrew/cask-fonts/font-meslo-nerd-font-mono
homebrew/cask-fonts/font-monofur-nerd-font
homebrew/cask-fonts/font-monofur-nerd-font-mono
homebrew/cask-fonts/font-monoid-nerd-font
homebrew/cask-fonts/font-monoid-nerd-font-mono
homebrew/cask-fonts/font-mononoki-nerd-font
homebrew/cask-fonts/font-mononoki-nerd-font-mono
homebrew/cask-fonts/font-mplus-1mn-nerd-mono
homebrew/cask-fonts/font-mplus-nerd-font
homebrew/cask-fonts/font-mplus-nerd-font-mono
homebrew/cask-fonts/font-noto-nerd-font
homebrew/cask-fonts/font-noto-nerd-font-mono
homebrew/cask-fonts/font-profont-nerd-font
homebrew/cask-fonts/font-profont-nerd-font-mono
homebrew/cask-fonts/font-proggyclean-nerd-font
homebrew/cask-fonts/font-proggyclean-nerd-font-mono
homebrew/cask-fonts/font-robotomono-nerd-font
homebrew/cask-fonts/font-robotomono-nerd-font-mono
homebrew/cask-fonts/font-sharetechmono-nerd-font
homebrew/cask-fonts/font-sharetechmono-nerd-font-mono
homebrew/cask-fonts/font-sourcecodepro-nerd-font
homebrew/cask-fonts/font-sourcecodepro-nerd-font-mono
homebrew/cask-fonts/font-spacemono-nerd-font
homebrew/cask-fonts/font-spacemono-nerd-font-mono
homebrew/cask-fonts/font-terminus-nerd-font
homebrew/cask-fonts/font-terminus-nerd-font-mono
homebrew/cask-fonts/font-tinos-nerd-font
homebrew/cask-fonts/font-tinos-nerd-font-mono
homebrew/cask-fonts/font-ubuntu-nerd-font
homebrew/cask-fonts/font-ubuntu-nerd-font-mono
homebrew/cask-fonts/font-ubuntumono-nerd-font
homebrew/cask-fonts/font-ubuntumono-nerd-font-mono

在搜索到的字体中随便挑一个执行下述命令安装即可:

AigeStudio@aige$ brew install [字体名称]

比如这里爱哥使用的是 “font-robotomono-nerd-font-mono” 这个字体,就执行下述命令安装这个字体:

AigeStudio@aige$ brew install homebrew/cask-fonts/font-robotomono-nerd-font-mono

安装完成的字体只是安装到了系统,我们还需要在 iTerm2 里应用起来,同样地在 iTerm2 的 “Preferences->Profiles”,选择 “Text” 标签:

选择 Text 标签 —— From AigeStudio

点击界面下方的 “Change Font” 按钮,在弹出的 “fonts” 对话框中找到我们安装的字体,点击后即可应用到 iTerm2 中:

应用字体 —— From AigeStudio

这里需要注意的是,当你使用某些有问题的字体时可能会导致 iTerm2 假死,此时可以通过 “Font Book” 应用修复字体问题,方法很简单,打开 “Font Book” 找到并选中该字体后点击右下角的自动解决:

解决字体问题 —— From AigeStudio

“Font Book” 并非常驻应用,找到它最简单的方式是通过 Spot:

从 Spot 查找 Font Book —— From AigeStudio

安装 zsh

zsh 是一个可兼容 bash 并完全可以取而代之的 shell,其提供了比 bash 更强大的一系列功能,比如足以让你欲罢不能的命令自动补全,比如当你键入 “git bran” 按下 tab 键后会自动补全命令为 “git branch” ,继续按 tab 还会列出相关分支,非常方便。

这里爱哥通过 brew 工具来安装管理 zsh,如果你还不知道 brew,可先查看 MacOS 安装 brew 并配置 cask

使用 brew 安装 zsh 非常简单,打开我们安装好的 iTerm,只需输入一行简单命令即可:

AigeStudio@aige$ brew install zsh

安装完毕后还需将 shell 切换为 zsh:

AigeStudio@aige$ sudo sh -c "echo $(which zsh) >> /etc/shells"
AigeStudio@aige$ chsh -s $(which zsh)

最后重启 iTerm,如无意外你会看见如下的 zsh 首次配置信息:

This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses ---

如果你不想配置,那么直接输入 “0” 即可,此时会生成 zsh 的配置文件 “~/.zshrc”。此时窗口及信息变为如下,表示 zsh 已经安装配置成功:

配置 zsh 成功 —— From AigeStudio

安装 oh-my-zsh

zsh 虽然强大,但是配置相当复杂,以至于很多人因为配置zsh而放弃使用它,而 oh-my-zsh 的出现,极大地简化了 zsh 的配置,你只需修改一份简单的配置文件就可以操控 zsh,安装 oh my zsh 的方式可以参考其 GitHub 页,这里爱哥直接使用官方给出的自动安装方式:

AigeStudio@aige$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

安装完成后就可以看到整个 iTerm2 窗口界面的变化:

安装 oh-my-zsh 成功 —— From AigeStudio

修改 zsh 主题

oh-my-zsh 安装完成后其默认 zsh 主题为 robbyrussell,可以从 oh-my-zsh的 GitHub 开源项目 页面查看更多的内置主题:

oh-my-zsh 提供的 zsh 主题 —— From AigeStudio

内置主题的使用很简单,随便找一个你喜欢的主题 Copy 其主题名字,比如这里爱哥选择 “afowler” 这个主题,编辑 zsh 的配置文件 “~/.zshrc”,将里面的 ZSH_THEME="robbyrussell" 修改为 ZSH_THEME="afowler" 然后执行命令:

AigeStudio@aige$ exec $SHELL

或重启 iTerm2 即可。

安装 zsh 第三方主题

oh-my-zsh 的第三方主题均存放在 “~/.oh-my-zsh/custom/themes” 目录下,使用时只需将第三方主题下载到该目录并修改配置文件中对应的主题名即可;这里以 GitHub上 非常热门的 PowerLevel9k 开源主题为例,使用时先将该主题 clone 下来,将整个项目目录 Copy 至 ~/.oh-my-zsh/custom/themes 目录下(注意,是 powerlevel9k 的根目录,不要有嵌套目录):

安装 oh-my-zsh 成功 —— From AigeStudio

然后修改配置文件将主题指定为 “powerlevel9k”:ZSH_THEME="powerlevel9k/powerlevel9k"

注意:这里的 “powerlevel9k/powerlevel9k” 指的是 powerlevel9k 目录下的 powerlevel9k 主题,而不是 powerlevel9k 目录下的 powerlevel9k 目录。

修改完毕后记得执行 exec $SHELL 或重启 iTerm2,默认效果如下:

PowerLevel9K 主题默认状态 —— From AigeStudio

可以看到现在在命令行的左右侧都有了信息显示,我们可以根据 PowerLevel9K 的 wiki 自定义这些显示信息,信息指定参数为:

# 左边信息参数以及默认值
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir vcs)

# 右边信息参数以及默认值
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=((status root_indicator background_jobs history time))

我们可以根据 wiki 中各种不同的 Segments 设置自己喜欢的显示信息,只需要在配置文件中加上上述两个参数即可:

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir_writable vcs vi_mode )
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status time load ram battery)

上面爱哥的配置是左边显示目录读写状态、版本控制信息以及编辑模式信息,右边显示的这是当前命令执行状态、当前命令执行时间、负载信息、内存信息以及电量信息,显示效果如下:

为 PowerLevel9K 主题增加信息展示 —— From AigeStudio

你可以根据官方的 wiki 来自定义自己的显示信息,具体可以参考官方 wiki 这里就不多说了。除此之外,如果想让该主题显示我们上面设置的字符 Icon,还需要在配置文件中加入:

POWERLEVEL9K_MODE='nerdfont-complete'

这一行参数才行,这样在一些可以显示字符Icon的命令行里就可以看到漂亮的Icon图标啦,比如下面这个进入到Git目录中的显示效果:

让 PowerLevel9K 主题显示图标字符 —— From AigeStudio
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容