macOS 終端機體驗最佳化:iTerm2、Oh My Zsh Shell 與 Powerlevel9k
|介紹
Homebrew
Homebrew 是 macOS 底下的套件管理程式,如同 Linux 的 APT,這幾年己漸漸取代 MacPorts 成為 macOS 套件管理工具的主流。
iTerm2
操作效率與使用體驗遠好於原生終端機,支援許多強大且方便好用的功能,比如:
- 分割視窗
- 隨傳隨到多隆鍵(Hotkey Window)
- 剪貼簿歷史
- 操作畫面重播
- 高度定制性
- 多主機多帳號管理
- 盡可能不讓手移動的快速鍵
- 免滑鼠選取複製貼上
- 指令自動補完
無論是輕度使用者或重度開發者都推薦改用 iTerm2 來取代原生終端機。
ZSH
ZSH 是 Unix、Linux 底下著名的 shell1,與 terminal 不同的是,套用 Shell 的影響是作業系統層面,兩者之間關係有點類似網頁與瀏覽器。
macOS 預設的 Shell 是 Bash,本身已內建 ZSH,後面會提到如何切換。
Oh My Zsh
ZSH 本質是不錯的 Shell,但礙於駕馭曲線太高,在 Oh My Zsh 出來之前都一直乏人問津。
絕大多數使用 ZSH 的人都是靠 Oh My Zsh,它還加了外掛(plugin)及主題(theme)功能,也是多數人安裝 Oh My Zsh 的主要目的,可以說是 ZSH 加強版。
powerlevel9k
Oh My Zsh 是 ZSH 的加強版,而 Powerlevel9k 又是 Oh My Zsh 的加強版,主要是能客制化提示符號顯示系統狀態、git、程式語言、雲端運算……各式訊息(全部支援訊息)。只要照著接下來的步驟做,最終 macOS 命令模式從 iTerm2 呈現出來的畫面會是這樣:
因為主要變更的是Shell,macOS 裡原生的終端機也會變成:只是沒那麼好看就是了(如果仍堅持使用原生終端機的話…)。
準備環境
安裝 Homebrew
如果沒有 Homebrew,先執行以下指令安裝:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Homebrew 會偵測是否有 Xcode,沒有的話過程會要求輸入目前登入帳號的密碼並自動安裝 Xcode,過程約數分鐘。
⚠️MacPorts 與 Homebrew 彼此不相容,要安裝 Homebrew 前請務必確認 MacPorts 已移除。
如果己經有 Homebrew,則先執行更新與升級:
brew update && brew upgrade
如果不太確定是否已有安裝 Homebrew ,可以執行
brew --version
有出現版號代表有安裝。
安裝 Powerline/Nerd Font 字體
Oh My Zsh 裡許多主題或外掛都會用到額外的 icon,這類支援額外 icon 的字體叫 powerline font。其它還有 Programmer Font、Awesome Powerline Fonts 及 Nerd Fonts,每個字體都額外提供上個字體所沒有的 icon(資料來源)。原則上 Powerline font 己經夠用,但基於工程師不喜歡「缺少的感覺」心裡因素作祟,我個人會推薦 icon 最齊全的 nerd 字體(天曉得還會不會再出個補上 Nerd 不足的字體)。
這裡沒有先安裝字體的話,後續在切換 Shell 的主題不支援的icon就會以問號框亂碼呈現。
方法一:透過 Homebrew 安裝
# 讓字體能用 Homebrew 來安裝
brew tap homebrew/cask-fonts
#安裝字體
brew install --cask font-sauce-code-pro-nerd-font
#如果想裝別的字體
brew search nerd
方法二:到官網下載安裝
如果不想只為了安裝字體多裝一個套件,也可以用傳統的方式從字體官網下載再從字體簿
app匯入的方式安裝。
⚠️字體安裝好後,先開啟
字體簿
app,選取剛安裝的字型看有沒有出現「字體重覆衝突」相關的警告訊息,有的話點選自動解決版本問題
讓系統自動修復,這部份沒有先處理待會 iTerm2 切換字型時應用程式會當機。
安裝 iTerm2
brew install --cask iterm2
cask 是 Homebrew 的子集,基本上就是一般 app 應用程式可直接透過
brew cask
指令一鍵安裝,省略了傳統開啟 Safari 到官網、搜尋app、下載、拖曳App 到應用程式資料夾的安裝方式。
變更預設字體
開啟 iTerm2: ⌘, (Preferences) → Profiles → Text → Change Font → 搜尋並點選nerd
選擇一個配色(非必要步驟)
個人覺得 Solarized Dark 配色與與待會要介紹的主題最搭,也是 iTerm2 除了預設之外最受歡迎的配色。
⌘, → Profiles → Color → Color Presets… → Solarized Dark
雖然 Solarized Dark 配色好看,但預設的前景文字顏色略暗,看得會有些吃力,可以再點選Foreground 顏色框
,把顏色改為白色看起來就清楚許多。
安裝好後,從這裡開始由 iTerm2 接手後續步驟。
安裝 ZSH
brew install zsh
雖然 macOS 已內建 ZSH,但版本較舊也不會自動更新,執行的是安裝指令但實際是把內建的 ZSH 更新到最新版。
zsh --version zsh 5.3 (x86_64-apple-darwin17.0) #還沒安裝前是5.3版 brew install zsh Updating Homebrew... ==> Downloading https://homebrew.bintray.com/bottles/zsh-5.5.1.high_sierra.bottl ######################################################################## 100.0% ==> Pouring zsh--5.5.1.high_sierra.bottle.tar.gz 🍺 /usr/local/Cellar/zsh/5.5.1: 1,444 files, 12.6MB zsh --version zsh 5.5.1 (x86_64-apple-darwin17.5.0) #安裝完後更新到最新版
一旦 ZSH 被加入 Homebrew 後,未來就會被加入更新檢查清單裡。
將預設 shell 改為 ZSH
chsh -s /bin/zsh
安裝 Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Powerlevel9k
Powerleve9k 既是外掛也是主題。主題的部分是以 agnoster 為基礎再加強識別度,可以將許多本機資訊或醒目提示客制化在命令列上,還可選擇要顯示在左邊還右邊。
安裝
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
設定
編輯~/.zshrc
把
ZSH_THEME="robbyrussell"
改成
ZSH_THEME="powerlevel9k/powerlevel9k"
以下是我的設定:
# 要使用的主題(二個powerlevel9k中間加斜線無誤)
ZSH_THEME="powerlevel9k/powerlevel9k"
# 左方命令提示要顯示的內容
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
os_icon # 作業系統icon
context # 主機與使用者名稱
dir # 所在目錄
dir_writable # 目錄寫入鎖定警告,無寫入權限的目錄會出現紅色鎖頭
root_indicator # 進入超級使用者權限會出現額外提示
ssh # 處於 SSH 連線會出現額外提示
)
# 右方命令提示要顯示的內容
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
status
)
# 使用 nerd font 可以顯示更多 icon。詳情請參考 powerlevel9k wiki
POWERLEVEL9K_MODE='nerdfont-complete'
# 若當前登入的帳號為 david,就不用特別顯示出來,可節省一段顯示空間
DEFAULT_USER="david"
# 修正進 root 出現一堆 [oh-my-zsh] 權限安全警告訊息
ZSH_DISABLE_COMPFIX=true
# 按 tab 如果沒有可用指令就出現紅點
COMPLETION_WAITING_DOTS="true"
推薦外掛
autojump
雖然 ZSH 己內建快速切換目錄指令d
,但d
指令只會記得當下操作的 session 曾開啟過的目錄;而 autojump 會記得安裝後所有曾去過的目錄。
j 目錄名
就可以直接進入該目錄。
解決 root 無法套用 ZSH shell 的問題
# 把 david 改為自己的使用者帳號
cp -R /Users/david/.oh-my-zsh /Users/david/.zshrc .
可以考慮在 powerlevel9k 左邊顯示的內容設定加個
root_indicator
加強切換到 root 環境底下的識別度。
- Shell 是系統的使用者介面,它定義了系統的操作方式(比如按
tab
會補完檔名)及如何呈現(比如目錄會顯示不同顏色),不同 Shell 呈現不同的介面與功能(當然還包含開發層面的部分,這裡僅簡單的解釋)。 ↩
『brew cask search nerd』 這個語法現在是錯誤的。
不過,可以簡單地改使用這個語法『brew search nerd』
多謝提醒,已更新。