Skip to content

WSL2 Terminal 美化與功能強化

在 WSL2(Ubuntu)以 Zsh + Oh My Zsh + Powerlevel10k + zoxide 建立高可讀、低延遲、可長期維護的終端環境。

概述

WSL2 在 Windows 開發環境中常扮演 Linux 原生工具鏈執行層,但預設 shell 體驗偏基礎:缺少語法高亮、智能補全、快速目錄跳轉與環境提示。當專案跨容器、語言版本與多 Git 倉庫時,終端可觀測性不足會直接影響操作效率。

現代化做法是以 Zsh 為基礎,導入 Oh My Zsh 框架與 Powerlevel10k 主題,再搭配 autosuggestions、syntax-highlighting 與 zoxide。其目標不只是美觀,而是讓每次命令輸入更可預測、可回溯、可維護。

核心內容

建議組合與責任分層

層級工具職責
ShellZsh互動式命令列核心
框架Oh My Zsh插件管理與基礎配置
主題Powerlevel10k即時狀態顯示與 prompt 版面
補強autosuggestions / syntax-highlighting建議與錯誤預警
跳轉zoxide常用目錄智能導向

為何推薦 Powerlevel10k + zoxide

Powerlevel10k 的 Instant Prompt 可大幅降低啟動延遲,且支援完整 segment 自訂;相較舊主題(powerlevel9k、bullet-train)維護狀態更好。目錄跳轉工具則建議從停更的 fasd 遷移到 zoxide,避免長期維護風險。

Windows 與 WSL 的字型一致性

WSL2 字型設定實際在 Windows 端生效。若只在 Linux 內設定而未調整 Windows Terminal / VS Code 字型,仍會出現圖示方框。建議兩端都使用同一套 Nerd Font,以確保 prompt 對齊與 glyph 正常顯示。

關鍵要點

  • exec zsh 通常比 source ~/.zshrc 更穩定,較不易出現奇怪重載行為
  • zsh-syntax-highlightingfast-syntax-highlighting 二擇一即可,避免衝突
  • 插件越多啟動越慢,應保留高頻使用插件
  • chsh 在 WSL 不生效,可在 .bashrc 中以互動式條件 exec zsh
  • 前提是先完成WSL 2 安裝指南(Windows 11),確保底層發行版與路徑策略正確

實際應用

在日常 DevOps 與後端維運情境中,這套組合可讓使用者快速辨識 Git 狀態、降低命令錯誤率,並透過 z/zi 快速切換到常用專案路徑。若同時在 Windows 端使用 PowerShell,建議搭配PowerShell Terminal 美化指南形成雙環境一致體驗。

部署設定參考

安裝核心工具

bash
sudo apt update && sudo apt install zsh -y
chsh -s $(which zsh)

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

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

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-completions \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-completions
git clone https://github.com/zdharma-continuum/fast-syntax-highlighting \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting

zoxide 安裝與初始化

bash
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh
echo 'eval "$(zoxide init zsh)"' >> ~/.zshrc

.zshrc 關鍵片段

bash
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"

plugins=(
  git
  zsh-autosuggestions
  zsh-completions
  fast-syntax-highlighting
  extract
  sudo
  dirhistory
)

source $ZSH/oh-my-zsh.sh
eval "$(zoxide init zsh)"
[ ! -f ~/.p10k.zsh ] || source ~/.p10k.zsh

Windows Terminal 字型設定

json
{
  "profiles": {
    "defaults": {
      "font": {
        "face": "MesloLGS NF",
        "size": 12
      }
    }
  }
}

相關概念

來源