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

12,602 阅读6分钟

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