巧用 iTerm2 & zsh & oh-my-zsh 打造炫酷的 MacOS 終端環(huán)境

MacOS 系統(tǒng)自帶的 Bash 雖然已經(jīng)很強大膛壹,但是對于一些細節(jié)功能的支持并不完美柔吼,重點是對于一個顏控來說皂股,原生 Bash 真的很丑……可塑性也不高荷辕。本文將使用 iTerm2 這款被各路大牛吹爆的 MacOS 平臺最好用終端結(jié)合 zsh 來打造一個炫酷的終端環(huán)境途戒。最終效果大致如下:

Bash 與調(diào)整后的 iTerm2 對比 —— From AigeStudio

左邊是原生 Bash 默認狀態(tài)坑傅,右邊是 iTerm2 做完整容手術(shù)后的樣子。本文我們只整容喷斋,不介紹 iTerm2 和 zsh 的相關(guān)功能唁毒,關(guān)于這兩者的強大功能你完全可以自窺對應(yīng)的官方文檔自行修煉。最后星爪,你可能會問:問什么要這么炫酷的終端環(huán)境呢浆西?這個問題的答案就好比為什么喜歡看帥氣小伙或漂亮妹子一樣簡單~

安裝 iTerm2

首先我們要做的當(dāng)然是安裝 iTerm2 啦,安裝方式主要分為兩種:

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

兩者都可以安裝 iTerm2 顽腾,任選一種即可近零。

命令行安裝

命令行安裝主要是通過 brew 命令行工具進行拔妥,如果你尚未安裝過 brew顾孽,那么請先參閱 MacOS 安裝 brew 并配置 cask

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

AigeStudio@aige$ brew cask instal iterm2

安裝包安裝

這個就很簡單了蝴猪,直接打開 iTerm2 官網(wǎng)下載安裝即可漓摩。

配置 iTerm2

默認的 iTerm2 比較單調(diào)不怎么美觀:

iTerm2 默認狀態(tài) —— From AigeStudio

我們可以通過一系列的設(shè)置更改它的色彩讓其變得好看裙士。

調(diào)整 iTerm2 色彩顯示范圍

在早期的 iTerm2 版本中其默認的色彩顯示范圍很窄,需要將其調(diào)整為更寬的色彩顯示范圍才能更好地展示自定的顏色幌甘,調(diào)整方式為進入 iTerm2 的 “Preferences->Profiles->Terminal”潮售,將 “Report Terminal Type” 設(shè)置為 “xterm-256color”:

調(diào)整 iTerm2 色彩范圍 —— From AigeStudio

在最近的一些更新版本中痊项,iTerm2 已經(jīng)將默認的 “Report Terminal Type” 值設(shè)置成了 “xterm-256color”,因此如果你用的 iTerm2 版本較新也許就不用更改啦酥诽。

更改 iTerm2 的 “Color Preset”

iTerm2 內(nèi)置了幾個不怎么好看的 Color Preset:

iTerm2 內(nèi)置顏色預(yù)設(shè) —— From AigeStudio

比如 iTerm2 默認的 “Dark Background” 顏色搭配就很生硬鞍泉,慶幸的是 iTerm2 支持自己導(dǎo)入(或自己制作,如果你可以的話) Color Preset:

導(dǎo)入 iTerm2 顏色預(yù)設(shè) —— From AigeStudio

網(wǎng)上有許多大牛制作的 “Color Preset” 庫肮帐,大家可以直接下載導(dǎo)入到 iTerm2 中使用咖驮,這里愛哥使用的是 GitHub 上開源項目 iTerm2-Color-Schemes 里的 “Color Preset”。將 “iTerm2-Color-Schemes” 這個項目 Clone 下來后其目錄結(jié)構(gòu)如下:

開源項目 iTerm2-Color-Schemes 目錄結(jié)構(gòu) —— From AigeStudio

我們這里只使用 “Color Preset”训枢,這些 “Color Preset” 都存放在 “schemes” 目錄下而 “screenshots” 目錄下這是對應(yīng)的預(yù)覽圖:

開源項目 iTerm2-Color-Schemes 預(yù)覽圖 —— From AigeStudio

隨便挑選一個托修,比如這里愛哥選的是 “teerb”,記住這個預(yù)設(shè)名字恒界,回到 “iTerm2的Preferences->Profiles”睦刃,選擇 “colors” 標(biāo)簽:

iTerm2 顏色設(shè)置 —— From AigeStudio

然后選擇右下角的 “Color Preset...”,在彈出的選擇框中我們選擇 “import...”十酣,然后選中 “schemes” 目錄中的 “teerb” 預(yù)設(shè)導(dǎo)入涩拙,導(dǎo)入的預(yù)設(shè)并不會直接使用:

iTerm2 導(dǎo)入顏色設(shè)置 —— From AigeStudio

還需要我們手動選擇一下。應(yīng)用成功后可以看到整個 iTerm2 終端窗口顏色改變說明修改成功:

導(dǎo)入 iTerm2 顏色設(shè)置成功 —— From AigeStudio

讓 iTerm2 支持字符 Icon

為了讓 iTerm2 顯示特殊的 Icon 字符耸采,我們還需安裝特殊的字體兴泥,這類字體稱為 “PowerLine Font”,還有可以支持比 “PowerLine Font” 更多字符字體的 “Nerd Font”虾宇,這里愛哥直接使用的 “Nerd Font”搓彻,安裝后 iTerm2 顯示效果如下圖(注:下圖是全部配置完成后的效果):

演示字符字體 —— From AigeStudio

字體的安裝也可以分為兩種形式:

  1. 命令行安裝
  2. 字體文件直接安裝

這里愛哥個人是比較傾向于推薦命令的方式安裝的,因為字體與應(yīng)用不同嘱朽,應(yīng)用在 MacOS 里面獨立性比較強管理起來方便旭贬,字體雖說有專門的 “Font Book” 應(yīng)用管理,但是使用起來遠不如直接用 brew 管理方便燥翅。

字體文件直接安裝

這種方式很簡單骑篙,就是直接下載對應(yīng)的字體文件雙擊安裝即可,安裝后的字體文件可通過 MacOS 自帶的 Font Book 應(yīng)用管理森书,這里不在贅述。

命令行安裝

通過 brew 命令安裝先以 “nerd” 作為關(guān)鍵詞搜索相關(guān)資源:

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

在搜索到的字體中隨便挑一個執(zhí)行下述命令安裝即可:

AigeStudio@aige$ brew install [字體名稱]

比如這里愛哥使用的是 “font-robotomono-nerd-font-mono” 這個字體谎势,就執(zhí)行下述命令安裝這個字體:

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

安裝完成的字體只是安裝到了系統(tǒng)凛膏,我們還需要在 iTerm2 里應(yīng)用起來,同樣地在 iTerm2 的 “Preferences->Profiles”脏榆,選擇 “Text” 標(biāo)簽:

選擇 Text 標(biāo)簽 —— From AigeStudio

點擊界面下方的 “Change Font” 按鈕猖毫,在彈出的 “fonts” 對話框中找到我們安裝的字體,點擊后即可應(yīng)用到 iTerm2 中:

應(yīng)用字體 —— From AigeStudio

這里需要注意的是须喂,當(dāng)你使用某些有問題的字體時可能會導(dǎo)致 iTerm2 假死吁断,此時可以通過 “Font Book” 應(yīng)用修復(fù)字體問題趁蕊,方法很簡單,打開 “Font Book” 找到并選中該字體后點擊右下角的自動解決:

解決字體問題 —— From AigeStudio

“Font Book” 并非常駐應(yīng)用仔役,找到它最簡單的方式是通過 Spot:

從 Spot 查找 Font Book —— From AigeStudio

安裝 zsh

zsh 是一個可兼容 bash 并完全可以取而代之的 shell掷伙,其提供了比 bash 更強大的一系列功能,比如足以讓你欲罷不能的命令自動補全又兵,比如當(dāng)你鍵入 “git bran” 按下 tab 鍵后會自動補全命令為 “git branch” 任柜,繼續(xù)按 tab 還會列出相關(guān)分支,非常方便沛厨。

這里愛哥通過 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”辰企。此時窗口及信息變?yōu)槿缦路缇溃硎?zsh 已經(jīng)安裝配置成功:

配置 zsh 成功 —— From AigeStudio

安裝 oh-my-zsh

zsh 雖然強大,但是配置相當(dāng)復(fù)雜牢贸,以至于很多人因為配置zsh而放棄使用它竹观,而 oh-my-zsh 的出現(xiàn),極大地簡化了 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 開源項目 頁面查看更多的內(nèi)置主題:

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

內(nèi)置主題的使用很簡單誊抛,隨便找一個你喜歡的主題 Copy 其主題名字,比如這里愛哥選擇 “afowler” 這個主題整陌,編輯 zsh 的配置文件 “~/.zshrc”拗窃,將里面的 ZSH_THEME="robbyrussell" 修改為 ZSH_THEME="afowler" 然后執(zhí)行命令:

AigeStudio@aige$ exec $SHELL

或重啟 iTerm2 即可。

安裝 zsh 第三方主題

oh-my-zsh 的第三方主題均存放在 “~/.oh-my-zsh/custom/themes” 目錄下泌辫,使用時只需將第三方主題下載到該目錄并修改配置文件中對應(yīng)的主題名即可随夸;這里以 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 目錄乙各。

修改完畢后記得執(zhí)行 exec $SHELL 或重啟 iTerm2,默認效果如下:

PowerLevel9K 主題默認狀態(tài) —— From AigeStudio

可以看到現(xiàn)在在命令行的左右側(cè)都有了信息顯示幢竹,我們可以根據(jù) PowerLevel9K 的 wiki 自定義這些顯示信息耳峦,信息指定參數(shù)為:

# 左邊信息參數(shù)以及默認值
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir vcs)

# 右邊信息參數(shù)以及默認值
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=((status root_indicator background_jobs history time))

我們可以根據(jù) wiki 中各種不同的 Segments 設(shè)置自己喜歡的顯示信息,只需要在配置文件中加上上述兩個參數(shù)即可:

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

上面愛哥的配置是左邊顯示目錄讀寫狀態(tài)妨退、版本控制信息以及編輯模式信息妇萄,右邊顯示的這是當(dāng)前命令執(zhí)行狀態(tài)、當(dāng)前命令執(zhí)行時間咬荷、負載信息冠句、內(nèi)存信息以及電量信息,顯示效果如下:

為 PowerLevel9K 主題增加信息展示 —— From AigeStudio

你可以根據(jù)官方的 wiki 來自定義自己的顯示信息幸乒,具體可以參考官方 wiki 這里就不多說了懦底。除此之外,如果想讓該主題顯示我們上面設(shè)置的字符 Icon罕扎,還需要在配置文件中加入:

POWERLEVEL9K_MODE='nerdfont-complete'

這一行參數(shù)才行聚唐,這樣在一些可以顯示字符Icon的命令行里就可以看到漂亮的Icon圖標(biāo)啦,比如下面這個進入到Git目錄中的顯示效果:

讓 PowerLevel9K 主題顯示圖標(biāo)字符 —— From AigeStudio
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腔召,一起剝皮案震驚了整個濱河市杆查,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌臀蛛,老刑警劉巖亲桦,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浊仆,居然都是意外死亡客峭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門抡柿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舔琅,“玉大人,你說我怎么就攤上這事洲劣”蛤荆” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵囱稽,是天一觀的道長星著。 經(jīng)常有香客問我,道長粗悯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任同欠,我火速辦了婚禮样傍,結(jié)果婚禮上横缔,老公的妹妹穿的比我還像新娘。我一直安慰自己衫哥,他們只是感情好茎刚,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撤逢,像睡著了一般膛锭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚊荣,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天初狰,我揣著相機與錄音,去河邊找鬼互例。 笑死奢入,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的媳叨。 我是一名探鬼主播腥光,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糊秆!你這毒婦竟也來了武福?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤痘番,失蹤者是張志新(化名)和其女友劉穎捉片,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夫偶,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡界睁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兵拢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翻斟。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖说铃,靈堂內(nèi)的尸體忽然破棺而出访惜,到底是詐尸還是另有隱情,我是刑警寧澤腻扇,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布债热,位于F島的核電站,受9級特大地震影響幼苛,放射性物質(zhì)發(fā)生泄漏窒篱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望墙杯。 院中可真熱鬧配并,春花似錦、人聲如沸高镐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫉髓。三九已至观腊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間算行,已是汗流浹背梧油。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纱意,地道東北人婶溯。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像偷霉,于是被迫代替她去往敵國和親迄委。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容