Oh My Zsh 主題設定:Powerlevel10k 安裝與客製化完整教學

Oh My Zsh 內建了一百多個主題,但大多數人裝完玩了兩天就停在 Powerlevel10k——因為它把「好看」和「有用」這兩件事都做到位了。
這篇說清楚怎麼裝、設定精靈怎麼走、以及不想用精靈要怎麼手動改。
為什麼是 Powerlevel10k
其他主題的問題在於:要顯示 git 狀態、Node 版本、Python venv 之類的資訊,每次都得跑一堆子程序——你按 Enter 之後,下一個 prompt 要等一兩秒才出現。
Powerlevel10k 用了一個聰明的做法:Instant Prompt。它在 shell 載入時先把上一個 prompt 的結果快取起來,顯示出來之前不等 shell 完整初始化。結果就是,視覺上幾乎感覺不到延遲,但 prompt 裡的資訊還是完整的。
| 一般主題 | Powerlevel10k | |
|---|---|---|
| Git 狀態顯示 | 每次都跑 git | 非同步更新,不卡主線 |
| Shell 啟動速度 | 可能 1–2 秒 | 即時(Instant Prompt) |
| 客製化彈性 | 改 theme 檔案 | 獨立的 .p10k.zsh 設定檔 |
| 安裝難度 | 各自不同 | 有互動式設定精靈 |
安裝 Powerlevel10k
第一步:安裝字型
Powerlevel10k 需要支援 Powerline 符號的字型。官方推薦 MesloLGS NF:
# macOS 用 Homebrew
brew install --cask font-meslo-lg-nerd-font
# 或手動下載(四個檔案):
# https://github.com/romkatv/powerlevel10k#meslo-nerd-font-patched-for-powerlevel10k裝完之後,去終端機設定(iTerm2 / Terminal.app / Warp 等)把字型改成 MesloLGS NF。這步不做的話,prompt 的圖示會顯示成方塊。
第二步:clone 主題
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k第三步:套用主題
打開 ~/.zshrc,把 ZSH_THEME 改成:
ZSH_THEME="powerlevel10k/powerlevel10k"然後 source ~/.zshrc,設定精靈應該會自動跳出來。
跑設定精靈
設定精靈會問你一系列問題,根據你的答案生成 ~/.p10k.zsh。整個流程大概 3–5 分鐘:
- 字型確認:精靈會顯示幾個符號,問你看起來有沒有正確——這是確認字型裝好了沒
- Prompt 樣式:幾個視覺風格選一個(精簡/豐富/超豐富)
- 字符集:Unicode 或純 ASCII(SSH 環境建議 ASCII 比較不容易出問題)
- 顯示資訊:要不要顯示 git 狀態、Node 版本、Python venv 等
- Prompt 位置:左邊和右邊各放什麼
- 換行:指令和 prompt 之間要不要空一行
如果之後想重新跑精靈:
p10k configure手動客製化 .p10k.zsh
設定精靈跑完之後,所有設定都在 ~/.p10k.zsh——這個檔案控制 prompt 裡顯示什麼、順序、顏色。
找到 prompt 左側和右側的元素清單:
# ~/.p10k.zsh
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
os_icon # 左上角 OS icon
dir # 當前目錄
vcs # git 狀態
newline # 換行
prompt_char # 提示符號($ 或 ❯)
)
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
status # 上個指令的 exit code
command_execution_time # 上個指令執行了多久
node_version # Node.js 版本
python_version # Python 版本
time # 時間
)不想看的東西,直接把那一行刪掉或用 # 注解掉,source ~/.zshrc 立刻生效。
修改目錄縮短的長度:
# 預設只顯示最後 3 層路徑
typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last
typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=3修改 git 狀態顯示:
# 不顯示 untracked files 數量(大 repo 跑 git status 比較快)
typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON=''
typeset -g POWERLEVEL9K_VCS_MAX_NUM_STATUS_FILE_UPDATES=32Instant Prompt 設定
Powerlevel10k 的 Instant Prompt 需要在 ~/.zshrc 的最頂端加這段:
# ~/.zshrc 最頂端
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi精靈通常會自動加,但如果你是手動安裝或刪掉了,要記得補回去。
如果你的 ~/.zshrc 裡有 echo 或其他會輸出文字到 stdout 的指令,Instant Prompt 會報警告。把那些輸出改成寫到 stderr:
echo "訊息" >&2常見問題
圖示顯示方塊
字型沒裝好,或是終端機設定裡沒換字型。確認 iTerm2 / 你的終端機 Preferences → Profiles → Text → Font 改成 MesloLGS NF。
p10k configure 沒反應
可能是 ~/.zshrc 最底下那行沒有:
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh補上去再 source ~/.zshrc。
右側的 Node/Python 版本一直顯示
每個目錄都顯示版本資訊讓 prompt 很雜——可以設定只在特定條件顯示:
# 只有在目錄下有 package.json 時才顯示 node 版本
typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true
# 只有在啟用 venv 時才顯示 python 版本
typeset -g POWERLEVEL9K_PYTHON_VERSION_PROJECT_ONLY=true主題設定好了,最後一篇 05-tips:讓整套設定真正活下去的 alias 和維護習慣。