MacOS 系统自带的 Bash 虽然已经很强大,可是对于一些细节功能的支持并不完美,重点是对于一个颜控来讲,原生 Bash 真的很丑……可塑性也不高。本文将使用 iTerm2 这款被各路大牛吹爆的 MacOS 平台最好用终端结合 zsh 来打造一个炫酷的终端环境。最终效果大体以下:ios
左边是原生 Bash 默认状态,右边是 iTerm2 作完整容手术后的样子。本文咱们只整容,不介绍 iTerm2 和 zsh 的相关功能,关于这二者的强大功能你彻底能够自窥对应的官方文档自行修炼。最后,你可能会问:问什么要这么炫酷的终端环境呢?这个问题的答案就比如为何喜欢看帅气小伙或漂亮妹子同样简单~git
首先咱们要作的固然是安装 iTerm2 啦,安装方式主要分为两种:github
二者均可以安装 iTerm2 ,任选一种便可。shell
命令行安装主要是经过 brew 命令行工具进行,若是你还没有安装过 brew,那么请先参阅 MacOS 安装 brew 并配置 cask。ubuntu
安装 iTerm2 直接使用如下命令便可:bash
AigeStudio@aige$ brew cask instal iterm2
这个就很简单了,直接打开 iTerm2 官网下载安装便可。curl
默认的 iTerm2 比较单调不怎么美观:工具
咱们能够经过一系列的设置更改它的色彩让其变得好看。字体
在早期的 iTerm2 版本中其默认的色彩显示范围很窄,须要将其调整为更宽的色彩显示范围才能更好地展现自定的颜色,调整方式为进入 iTerm2 的 “Preferences->Profiles->Terminal”,将 “Report Terminal Type” 设置为 “xterm-256color”:ui
在最近的一些更新版本中,iTerm2 已经将默认的 “Report Terminal Type” 值设置成了 “xterm-256color”,所以若是你用的 iTerm2 版本较新也许就不用更改啦。
iTerm2 内置了几个不怎么好看的 Color Preset:
好比 iTerm2 默认的 “Dark Background” 颜色搭配就很生硬,庆幸的是 iTerm2 支持本身导入(或本身制做,若是你能够的话) Color Preset:
网上有许多大牛制做的 “Color Preset” 库,你们能够直接下载导入到 iTerm2 中使用,这里爱哥使用的是 GitHub 上开源项目 iTerm2-Color-Schemes 里的 “Color Preset”。将 “iTerm2-Color-Schemes” 这个项目 Clone 下来后其目录结构以下:
咱们这里只使用 “Color Preset”,这些 “Color Preset” 都存放在 “schemes” 目录下而 “screenshots” 目录下这是对应的预览图:
随便挑选一个,好比这里爱哥选的是 “teerb”,记住这个预设名字,回到 “iTerm2的Preferences->Profiles”,选择 “colors” 标签:
而后选择右下角的 “Color Preset...”,在弹出的选择框中咱们选择 “import...”,而后选中 “schemes” 目录中的 “teerb” 预设导入,导入的预设并不会直接使用:
还须要咱们手动选择一下。应用成功后能够看到整个 iTerm2 终端窗口颜色改变说明修改为功:
为了让 iTerm2 显示特殊的 Icon 字符,咱们还需安装特殊的字体,这类字体称为 “PowerLine Font”,还有能够支持比 “PowerLine Font” 更多字符字体的 “Nerd Font”,这里爱哥直接使用的 “Nerd Font”,安装后 iTerm2 显示效果以下图(注:下图是所有配置完成后的效果):
字体的安装也能够分为两种形式:
这里爱哥我的是比较倾向于推荐命令的方式安装的,由于字体与应用不一样,应用在 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” 标签:
点击界面下方的 “Change Font” 按钮,在弹出的 “fonts” 对话框中找到咱们安装的字体,点击后便可应用到 iTerm2 中:
这里须要注意的是,当你使用某些有问题的字体时可能会致使 iTerm2 假死,此时能够经过 “Font Book” 应用修复字体问题,方法很简单,打开 “Font Book” 找到并选中该字体后点击右下角的自动解决:
“Font Book” 并不是常驻应用,找到它最简单的方式是经过 Spot:
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 虽然强大,可是配置至关复杂,以致于不少人由于配置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 安装完成后其默认 zsh 主题为 robbyrussell,能够从 oh-my-zsh的 GitHub 开源项目 页面查看更多的内置主题:
内置主题的使用很简单,随便找一个你喜欢的主题 Copy 其主题名字,好比这里爱哥选择 “afowler” 这个主题,编辑 zsh 的配置文件 “~/.zshrc”,将里面的 ZSH_THEME="robbyrussell"
修改成 ZSH_THEME="afowler"
而后执行命令:
AigeStudio@aige$ exec $SHELL
或重启 iTerm2 便可。
oh-my-zsh 的第三方主题均存放在 “~/.oh-my-zsh/custom/themes” 目录下,使用时只需将第三方主题下载到该目录并修改配置文件中对应的主题名便可;这里以 GitHub上 很是热门的 PowerLevel9k 开源主题为例,使用时先将该主题 clone 下来,将整个项目目录 Copy 至 ~/.oh-my-zsh/custom/themes 目录下(注意,是 powerlevel9k 的根目录,不要有嵌套目录):
而后修改配置文件将主题指定为 “powerlevel9k”:ZSH_THEME="powerlevel9k/powerlevel9k"
。
注意:这里的 “powerlevel9k/powerlevel9k” 指的是 powerlevel9k 目录下的 powerlevel9k 主题,而不是 powerlevel9k 目录下的 powerlevel9k 目录。
修改完毕后记得执行 exec $SHELL
或重启 iTerm2,默认效果以下:
能够看到如今在命令行的左右侧都有了信息显示,咱们能够根据 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)
上面爱哥的配置是左边显示目录读写状态、版本控制信息以及编辑模式信息,右边显示的这是当前命令执行状态、当前命令执行时间、负载信息、内存信息以及电量信息,显示效果以下:
你能够根据官方的 wiki 来自定义本身的显示信息,具体能够参考官方 wiki 这里就很少说了。除此以外,若是想让该主题显示咱们上面设置的字符 Icon,还须要在配置文件中加入:
POWERLEVEL9K_MODE='nerdfont-complete'
这一行参数才行,这样在一些能够显示字符Icon的命令行里就能够看到漂亮的Icon图标啦,好比下面这个进入到Git目录中的显示效果: