Zsh 終端機美化指南:Oh My Zsh 必備擴充與 Starship 主題設定
對於開發者來說,終端機是一個相當重要與系統交互的介面,甚至在許多場景上,直接透過指令操作系統比使用滑鼠去跟 UI 介面互動還要更有效率。既然使用的頻率如此之高,那肯定也需要幫它打扮的漂漂亮亮。當然,除了這膚淺的理由外,安裝一些擴充套件還能讓終端機使用起來更加方便。我想對於剛接觸指令介面互動的新手來說,有個親切的終端機介面,也會更願意去使用。
2026-09-23Shell 的介紹與比較
自定義或美化終端機可以有兩個方面,一個是終端機程式本身,像是系統內建的終端機程式、Kitty、Ghostty,另一個是針對裡面的指令交互界面去調整。而這篇文章要分享的是後者,也就是在 shell 程式上做一些自定義。
Shell 是什麼?中文翻譯雖然叫做「殼層」,但我想大多數人都不會這樣講,所以我們等等都用 shell 來稱呼。Shell 本身也是一個程式,他負責接受使用者的輸入,根據輸入去分配、執行其他程式,與系統介接,並把結果再顯示出來。一般來說如果沒有特別說明,shell 指的是基於文字進行輸出入,也就是使用文字指令進行交互。
就像作業系統有很多種,shell 也有很多種。例如最陽春簡單的 sh、許多 Unix-like 系統預設使用的 bash 與 zsh、功能強大的 fish......。底下整理了幾個常見的 shell,它們之間的比較:
| Shell 名稱 | 主要特性 | 執行速度 | 互動體驗 | 適合使用場景 |
|---|---|---|---|---|
| sh (Bourne Shell) | 歷史最悠久、最基礎的 Shell。現代系統多由其他 shell (如 bash) 建立軟連結替代。 | 極快 | 差 | 維護極度老舊的 Unix 系統,或在資源極度受限的嵌入式環境中。 |
| bash (Bourne Again SHell) | 大多數 Linux 發行版的預設 shell,功能全面。 | 中等 | 佳 | 伺服器管理與撰寫通用腳本。適合需要高度可移植性的自動化 Shell Script 以及多數伺服器日常維運。 |
| zsh (Z Shell) | 擴充性極強,擁有強大的自動補全功能與龐大的生態系。 | 中等 | 極佳 | 開發者與工程師的日常工作環境。適合喜歡高度客製化終端機外觀與功能、需要頻繁進行互動式操作的使用者。 |
| fish (Friendly Interactive SHell) | 主打「開箱即用」,內建強大的語法高亮、基於歷史紀錄的智能自動建議。 | 較慢 | 極佳 | 追求極致友善體驗的個人終端機。適合新手或不想花時間設定外掛的開發者。 |
簡單來說,如果懶得繼續看下去,安裝那些插件和主題的話,那直接安裝 fish 就完事了,但由於 fish 的語法與傳統的 sh / bash 並不相容,之後很容易遇到問題需要手動改腳本。我認為 zsh 算是取得一個平衡,既擁有豐富自定義的彈性,同時也能兼容 sh / bash 的語法。
安裝 zsh 並設為預設 shell
首先可以先透過 echo $SHELL 確定目前使用的預設 shell 是不是早就已經是 zsh 了,如果輸出的結果並不是 zsh,那麼可以先透過套件管理工具安裝 zsh 並設為使用者預設登入 shell。
-
根據不同的套件管理工具安裝
zsh。# Debian based sudo apt update && sudo apt install zsh # RHEL / Fedora based sudo dnf install zsh # Arch Linux based sudo pacman -Sy && sudo pacman -S zsh # macOS 應該內建有 zsh 了,以下指令可以檢測當 zsh 不存在時安裝 which zsh || brew install zsh -
更換當前使用者的預設登入 shell 為
zsh(會被要求輸入使用者密碼)。chsh -s $(which zsh)
完成後可能會需要重新打開終端機程式,或是甚至需要登出重新登入,透過 echo $SHELL 確認是否有生效。如果 zsh 偵測到家目錄並沒有存在 .zshrc 設定檔,會在開啟時詢問,由於我們後續會安裝 zsh 管理工具,可以直接按下 q 無視當下的警告。
"Oh My ZSH!"
這句話不只是感嘆 zsh,同時也是 zsh 上一個相當好用的工具。Oh My Zsh 具備相當多方便的功能,能夠管理主題與插件。我們主要會用到 Oh My Zsh 的插件管理功能,透過它可以方便地安裝與管理插件。
安裝 Oh My Zsh 本身也相當簡單,首先確保 curl 與 git 等工具都有安裝在系統上了,接著只需要執行以下指令即可:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
自動補全與語法 Highlight
寫程式時 IDE 都會自動補全與語法 Highlight 了,終端機當然也應該要有這樣的功能。在 zsh 就有插件能做到這兩件事情,他們分別是 zsh-autosuggestions 和 zsh-syntax-highlighting。藉由剛剛安裝並啟用的 Oh My Zsh,我們只需要透過以下步驟就可以開始使用插件。
-
下載 zsh-autosuggestions 與 zsh-syntax-highlighting 到插件目錄。
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting -
透過
vim或任意的文字編輯器,編輯~/.zshrc,找到plugins=(git)的區塊,將上述的兩個插件以空白或換行區隔加入,如下所示。plugins=( git zsh-autosuggestions zsh-syntax-highlighting ) -
關閉終端機程式重開,或是執行
source ~/.zshrc以套用設定檔變更。
最後我們就能看到終端機具備自動補全與語法 Highlight 的功能啦!
Tab 候選、歷史紀錄搭配模糊搜尋
zsh 內建的 Tab 候選其實已經比 bash 好用很多了,但如果項目很多的話,我們可能還會希望能夠針對這些項目輸入一些關鍵字篩選。fzf 是一個相當強大的模糊搜尋工具,相較於 grep 這種傳統的搜尋工具只能查找連續且完全相符的字串,fzf 除了允許漏打幾個字之外,只輸入像是駝峰式命名的字首也同樣能找到,並且有一套方法能對結果做出合理的排序。
我們將會安裝兩個 zsh 插件,分別是 fzf-tab 和 zsh-fzf-history-search,都是以 fzf 針對 tab 候選與指令輸入的歷史記錄進行模糊搜尋。
-
要在
zsh之上安裝fzf相關的插件之前,需要在系統上先安裝fzf。# Debian based sudo apt update && sudo apt install fzf # RHEL / Fedora based sudo dnf install fzf # Arch Linux based sudo pacman -Sy && sudo pacman -S fzf # macOS brew install fzf -
接著跟前面安裝其他插件的步驟一模一樣,先下載
fzf-tab與zsh-fzf-history-search。git clone https://github.com/Aloxaf/fzf-tab ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab git clone https://github.com/joshskidmore/zsh-fzf-history-search ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-fzf-history-search -
編輯
~/.zshrc的plugin=(...)區塊,將這兩個插件加入。包含上面的其他插件,整個plugin區塊可能會像這樣:plugins=( git zsh-autosuggestions zsh-syntax-highlighting zsh-fzf-history-search fzf-tab ) -
關閉終端機程式重開,或是執行
source ~/.zshrc以套用設定檔變更。
此後不論是想要透過 Tab 選取候選項目,或是透過 Ctrl + R 查找歷史記錄,都可以直接輸入一些文字,讓 fzf 來進行模糊搜尋,再也不會因為列表太長而看得眼花撩亂。
為終端機添加花俏的元素
安裝完功能面向的 zsh 插件後,接著要來讓我們的終端機看起來更蝦趴有活力。過去我習慣使用 powerlevel10k 這個主題,最近又發現了 Starship 這個跨平台的終端機美顏工具,不論是 bash、zsh 或 fish 都能使用。
選一個順眼的 Nerd Font 並安裝
不過在開始之前,我們需要先安裝 Nerd Font。我們在終端機或寫程式時一般都會使用等寬字體 Mono Font 確保每個英文字母的寬度一致,看起來有對齊了那字元數就一定一樣。接下來我們會讓終端機再多一些圖標(像是 git 和各種開發框架的圖標),為了讓這些圖標能夠正常的顯示在終端機上,我們需要有支援這些圖標的字體,這種字體就叫做 Nerd Font。
在 nerdfonts 這個網站中,可以看到一些常見且支援 Nerd Font 的字體,挑一個順眼的下載就行了。我自己是使用微軟出的 Cascadia 系列,如果不知道要選什麼的話,下載這個也沒問題。有些 Linux 發行版本甚至會將字體包在套件清單中,要下載與安裝就相當方便了。
由於各個桌面環境、作業系統、發行版本安裝字體的方式都不太一樣,在這邊就不詳細敘述了。不過可以透過 fc-list 確認字體有沒有被系統辨認成功,並且也要到終端機設定中將使用的字體改成剛安裝的 Nerd Font。
安裝與啟用 Starship
其實 Starship 不只是支援 zsh,它支援各式各樣的作業系統和 shell,在 Starship 安裝說明 頁面中都有詳細步驟。這邊將 zsh 環境中怎麼安裝列出來。
-
透過 Starship 的安裝腳本,或是
rust的管理工具cargo進行安裝。# 使用腳本安裝 curl -sS https://starship.rs/install.sh | sh # 使用 cargo 安裝 cargo install starship --locked -
編輯
~/.zshrc並將以下啟動指令新增到最後一行:eval "$(starship init zsh)" -
同樣在完成編輯後關閉終端機程式重開,或是執行
source ~/.zshrc以套用設定檔變更。
Starship 可以有很多種圖標的自定義方式,但如果像我一樣懶惰,只是想要裝一下讓終端機好看的話,直接使用 官方提供的 Presets 也可以。像是直接執行下面的指令,就可以讓終端機煥然一新囉!
starship preset nerd-font-symbols -o ~/.config/starship.toml