如何讓 Terminal 看起來好用又好看|iTerms 2 + Oh-my-zsh 全攻略

自從換成 zsh 後,每次看 Terminal 都是一種享受,也希望讀者能夠跟著我的步驟,一步一步擁有自己好看又好用的 Terminal!

學.誌|Chris Kang
不止數據|Not Only Data
15 min readFeb 1, 2020

--

有鑑於之前每次為了重置我的 iTerms 2 後,總是要花一堆時間來重新設置,而每一次的設置又會花了我不少時間。另外一個原因,則是 iTerms 2 + zsh 的組合真的是讓我用起來愛不釋手啊!

因此,我這裡就利用一些時間,寫一篇文章完整記錄可能會用到的資源,也幫助想要一站式的完整設定 MacOS 的 Terminal 的各位玩家,能夠看完本文就能完整設定囉!

那我們就開始吧!

一、基礎套件安裝

一開始重灌或新使用一台 Mac 時,會需要重頭安裝個是各樣的套件,其中最關鍵的管理套件就是 brew。首先打開 MacOS 內建的 Terminal,並把以下的指令直接貼到 Terminal 就好囉!

安裝 brew

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安裝完 brew 後,就要使用裡面的簡易 CLI 應用程式安裝功能––––brew cask

安裝 iTerm 2

$ brew install iterm2

安裝完 iTerm 2 後,打開 iTerm 2 的介面,並到下列位置設定終端機主題。

Preferences -> Profiles -> Colors -> Color Presets

我自己是偏好 Solarized Dark + 調亮 Foreground(字體顏色,就在旁邊)到 70% 的亮度,看起來特別舒服。

如果對其他主題有興趣,可以參考 Scheme,使用方法則可看 Iterm2 and Z shell 設定

二、安裝 shell 系統

安裝 zsh

接下來便是本篇的主角 zsh 的相關設定,我就是在這裡浪費一堆時間的…好了廢話不多說,馬上讓我們開始吧!

brew install zsh

PS:透過 brew 安裝相關的套件,才不容易在管理套件時找不到套件。

安裝 Oh-my-zsh

我之前曾經不信邪,想要自己去挑戰 zsh 自行客製化,後來弄到崩潰決定直接放棄xD 原來 zsh 能設定的內容實在是太多了,多到光是連前面的初始化,都讓人選的滿頭問號。

還好,有了 Oh-my-zsh 這個偉大的套件,才有辦法讓我們輕輕鬆鬆的使用 zsh 的種種好處。

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

在安裝 Oh-my-zsh 後他會問你是否要默認 zsh 為預設 shell,大大方方的按下 y + enter,就正式進入 Oh-my-zsh 的世界啦!

如果當初忘記轉換的玩家,可以在安裝完後輸入下列指令轉換。

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

如果想要轉換回來也可以,記得要重新啟動 iTerm 2 或是重開一個新視窗:

$ chsh -s /bin/bash# 之後轉換回 zsh
$ chsh -s /usr/loacl/bin/zsh

資料補充:

  • Homebrew 安裝的 Zsh 位置在 /usr/local/bin/zsh,而系統安裝的則會在 /bin/zsh

為 Oh-my-zsh 設定主題

下面有大量的內置主題可以參考,如果有喜歡的可以去 .zshrc 替換。

當然,最多人用而且也是我最愛的套件,仍然莫過於 agnoster!那要如何更改主題呢?其實只需要去 zshrc 的設定檔改個主題就好囉!

$ vim ~/.zshrc
.zshrc 檔案內部

進來檔案後,按下 i 鍵更改以下指令 ZSH_THEME=”robbyrussell” 變成:

ZSH_THEME="agnoster"

在編輯完之後,按下 Esc 再按下 shift+: 觸發檔案編輯模式,打上 wq (用於寫入改變並離開檔案)。

隨後,可以選擇開新的一個終端頁面,或是執行:

$ exec $SHELL

此時我們會發現主題已經成功轉換了,但確有部分符號顯示不出來?!

怎麼辦,其實只要換個字形就可以囉!

更換更強力的字形 Powerline

其實只要能支援 Powerline 的字型,都能夠正確顯示這些圖示。下列頁面展示了所有可以被使用的 Powerline Font 供大家使用。

我自己是最推薦 Meslo Dotted for Powerline 的字體(size 16 px),字型不會過扁且不容易造成閱讀上的壓力。當然,網路上也有很多人推薦 Source Code Pro for Powerline,喜歡何者就見仁見智囉。

附上官方推薦的字體:

# 必須先執行這行,才能用 homebrew 安裝字型。執行過的人可以跳過
brew tap homebrew/cask-fonts
# 安裝指令
brew cask install font-meslo-for-powerline
# 其他字型也可以在 brew 上搜尋 nerd
brew search nerd

下載後記得先去 MacOS 內建的 Font Book 看看字型是否有衝突,如果有舊按自動排除問題,再來則是到 iTerm 2 裡更改字體。

Preferences -> Profiles -> Text -> Font -> Meslo Dotted for Powerline

接下來即可正常執行:

更換字型後

設定 Anaconda 啟動

我自己重灌有一部份是為了要處理 Anaconda 的一些怪問題,但重灌後的啟動碼著實讓我苦惱了好久啊!我就在這裡留一個備份,給有需要的人使用吧!

PS:一般來說安裝後的指令,都會放在 .bashrc 裡面,因此想要直接複製的讀者可以去跟目錄裡找找看呦!

只要直接把下列指令貼在 ~/.zshrc 裡就好囉!記得要把 USERNAME 更改成自己的使用者名字。

# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/Users/USERNAME/opt/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
\eval "$__conda_setup"
else
if [ -f "/Users/USERNAME/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/Users/USERNAME/opt/anaconda3/etc/profile.d/conda.sh"
CONDA_CHANGEPS1=false conda activate base
else
\export PATH="/Users/USERNAME/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda init <<<

三、大力推薦套件

Powerlevel9k

Agnoster 的超級超級加強版,同樣屬於 zsh theme 的套件,但不屬於預設主題,必須另外下載。

安裝 Powerlevel9k 主題:

git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k

啟用主題:

# 到 .zshrc 裡更改主題設定
ZSH_THEME="powerlevel9k/powerlevel9k"

設定 Powerlevel9k 顯示狀態:

在 ~/.zshrc 裡加入下方兩行設定值就可以使用囉!

# 左邊顯示的狀態
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir vcs)
# 右邊顯示的狀態
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time)

附註:最近作者又看到 powerlevel 的進化版 10k 囉!他可以完全接受 9k 的所有設定,因此不需要特別調整即可使用!

# 安裝到 ohmyZsh 的資料夾裡
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

我最後選擇幾個比較實用的資訊顯示:

# 設定主題
ZSH_THEME="powerlevel9k/powerlevel9k"
# Powerlevel9k icon 顯示
POWERLEVEL9K_MODE='nerdfont-complete'
# Powerlevel9k command line 左邊想顯示的內容
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(virtualenv dir dir_writable vcs vi_mode) # <= left prompt 設了 "dir"
# Powerlevel9k command line 右邊想顯示的內容
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status ram) # <= right prompt 設了 "status" 顯示執行正確與否

Zsh-autosuggestions

能夠自動幫你把過去輸入過的資訊提示出來,真的真的真的省了很多輸入的時間啊啊啊~大推這個套件,用過後就回不去了xD

# 下載套件至 Zsh 的 plugin 裡
$ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 啟用套件(在 ~/.zshrc 裡)
plugins=(zsh-autosuggestions)

如果對於預設的提示字體顏色覺得太深,可以到下列位置修改:

~/.oh-my-zsh/custom/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

調整顯示顏色:

# 替換調 fg=8 換成其他顏色
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'

fg=8 的數字是 0 ~ 255,或者直接填寫常用的 8 種顏色文字 black, red, green, yellow, blue, magenta, cyan and white 我自己是習慣使用 fg=30的色票,不會太搶眼卻又不至於看不到文字。

zsh-syntax-highlighting

不同的指令會自動幫你上色,讓你知道自己是不是輸入正確的指令。

# 下載套件
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 啟用套件
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Autojump

跟上述兩個套件的啟動方式不太一樣,需要到 brew 安裝來啟用 Autojump。我自己用開啟資料夾的功能。

他雖然能夠順利開啟資料夾,但是沒辦法開到正確的資料夾,讓我懷疑是不是我的設定有問題…當然各位厲害的 Zsh 玩家也可以自己試試看,如果能順利使用務必跟筆者分享一下~

# 使用 brew 安裝 
$ brew install autojump
# 把設定加入 .zshrc
[ -f $(brew --prefix)/etc/profile.d/autojump.sh ] && . $(brew --prefix)/etc/profile.d/autojump.sh
# 重新讀取zshrc
$ source .zshrc
# 啟用套件
plugins=(autojump)

補充:如果想要讓 Autojump 能夠順利執行,一開始必須先以 cd 指令來切換資料夾,此時 Autojump 就會有切換紀錄。之後就能夠以 j + keyword 來快速切換資料夾囉!

# 如果之前曾 cd 到 Document 資料夾裡,下次 Autojump 就會順利切換到 Document 裡囉!$ j Doc

這樣所有的設定就都完成啦~可以開始享用你的 Oh-my-zsh + iTerm 2 囉!

如果文章中有任何錯誤或能夠改善的地方,都歡迎你留言給我喔!只希望你能夠用你的掌聲來幫我投票或支持,你的掌聲是我繼續寫下去最大的動力!

【希望用你的掌聲來投票與支持】拍 5~10 下:簽個到,表示支持(感謝你的鼓勵啊啊啊)拍 10~20 下:想要我未來多寫「數據技術相關」內容拍 20~30 下:想要我未來多寫「數據分析實例」內容拍 30~50 下:我有你這讀者,寫這篇也心滿意足了!

謝謝你願意把我的文章閱讀完

如果你喜歡筆者在 Medium 的文章,可以拍個手(Claps),
也歡迎你分享給你覺得有需要的朋友們。

參考資料

--

--

學.誌|Chris Kang
不止數據|Not Only Data

嗨!我是 Chris,一位擁有技術背景的獵頭,熱愛解決生活與職涯上的挑戰。專注於產品管理/資料科學/前端開發 / 人生成長,在這條路上,歡迎你找我一起聊聊。歡迎來信合作和交流: chriskang0917@gmail.com