Zsh 終端機美化指南:Oh My Zsh 必備擴充與 Starship 主題設定

對於開發者來說,終端機是一個相當重要與系統交互的介面,甚至在許多場景上,直接透過指令操作系統比使用滑鼠去跟 UI 介面互動還要更有效率。既然使用的頻率如此之高,那肯定也需要幫它打扮的漂漂亮亮。當然,除了這膚淺的理由外,安裝一些擴充套件還能讓終端機使用起來更加方便。我想對於剛接觸指令介面互動的新手來說,有個親切的終端機介面,也會更願意去使用。

2026-09-23

Shell 的介紹與比較

自定義或美化終端機可以有兩個方面,一個是終端機程式本身,像是系統內建的終端機程式、Kitty、Ghostty,另一個是針對裡面的指令交互界面去調整。而這篇文章要分享的是後者,也就是在 shell 程式上做一些自定義。

Shell 是什麼?中文翻譯雖然叫做「殼層」,但我想大多數人都不會這樣講,所以我們等等都用 shell 來稱呼。Shell 本身也是一個程式,他負責接受使用者的輸入,根據輸入去分配、執行其他程式,與系統介接,並把結果再顯示出來。一般來說如果沒有特別說明,shell 指的是基於文字進行輸出入,也就是使用文字指令進行交互。

就像作業系統有很多種,shell 也有很多種。例如最陽春簡單的 sh、許多 Unix-like 系統預設使用的 bashzsh、功能強大的 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。

  1. 根據不同的套件管理工具安裝 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
    
  2. 更換當前使用者的預設登入 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 本身也相當簡單,首先確保 curlgit 等工具都有安裝在系統上了,接著只需要執行以下指令即可:

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

安裝完成後會出現此歡迎文字

自動補全與語法 Highlight

寫程式時 IDE 都會自動補全與語法 Highlight 了,終端機當然也應該要有這樣的功能。在 zsh 就有插件能做到這兩件事情,他們分別是 zsh-autosuggestionszsh-syntax-highlighting。藉由剛剛安裝並啟用的 Oh My Zsh,我們只需要透過以下步驟就可以開始使用插件。

  1. 下載 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
    
  2. 透過 vim 或任意的文字編輯器,編輯 ~/.zshrc,找到 plugins=(git) 的區塊,將上述的兩個插件以空白或換行區隔加入,如下所示。

    plugins=(
        git
        zsh-autosuggestions
        zsh-syntax-highlighting
    )
    
  3. 關閉終端機程式重開,或是執行 source ~/.zshrc 以套用設定檔變更。

最後我們就能看到終端機具備自動補全與語法 Highlight 的功能啦!

自動補全與語法 Highlight 的 demo

Tab 候選、歷史紀錄搭配模糊搜尋

zsh 內建的 Tab 候選其實已經比 bash 好用很多了,但如果項目很多的話,我們可能還會希望能夠針對這些項目輸入一些關鍵字篩選。fzf 是一個相當強大的模糊搜尋工具,相較於 grep 這種傳統的搜尋工具只能查找連續且完全相符的字串,fzf 除了允許漏打幾個字之外,只輸入像是駝峰式命名的字首也同樣能找到,並且有一套方法能對結果做出合理的排序。

我們將會安裝兩個 zsh 插件,分別是 fzf-tabzsh-fzf-history-search,都是以 fzf 針對 tab 候選與指令輸入的歷史記錄進行模糊搜尋。

  1. 要在 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
    
  2. 接著跟前面安裝其他插件的步驟一模一樣,先下載 fzf-tabzsh-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
    
  3. 編輯 ~/.zshrcplugin=(...) 區塊,將這兩個插件加入。包含上面的其他插件,整個 plugin 區塊可能會像這樣:

    plugins=(
        git
        zsh-autosuggestions
        zsh-syntax-highlighting
        zsh-fzf-history-search
        fzf-tab
    )
    
  4. 關閉終端機程式重開,或是執行 source ~/.zshrc 以套用設定檔變更。

此後不論是想要透過 Tab 選取候選項目,或是透過 Ctrl + R 查找歷史記錄,都可以直接輸入一些文字,讓 fzf 來進行模糊搜尋,再也不會因為列表太長而看得眼花撩亂。

fzf 相關插件的 demo

為終端機添加花俏的元素

安裝完功能面向的 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 環境中怎麼安裝列出來。

  1. 透過 Starship 的安裝腳本,或是 rust 的管理工具 cargo 進行安裝。

    # 使用腳本安裝
    curl -sS https://starship.rs/install.sh | sh
    
    # 使用 cargo 安裝
    cargo install starship --locked
    
  2. 編輯 ~/.zshrc 並將以下啟動指令新增到最後一行:

    eval "$(starship init zsh)"
    
  3. 同樣在完成編輯後關閉終端機程式重開,或是執行 source ~/.zshrc 以套用設定檔變更。

Starship 可以有很多種圖標的自定義方式,但如果像我一樣懶惰,只是想要裝一下讓終端機好看的話,直接使用 官方提供的 Presets 也可以。像是直接執行下面的指令,就可以讓終端機煥然一新囉!

starship preset nerd-font-symbols -o ~/.config/starship.toml

Starship 使用 nerd-font-symbols preset 的 demo