PATH、plugin manager 和 prompt 是 shell 配置裡「每個開發者都會碰到、但容易放任不管」的三個區域。

PATH 管理

PATH 是最容易腐化的環境變數——每裝一個工具就加一條,最後 PATH 變成一長串看不懂的路徑,順序還會互相影響。

管理原則:

  • PATH 設定集中在一個地方(.zshenvenv.zsh),不散落在多個檔案
  • 新增前先想:這個路徑是所有機器都需要、還是特定機器才需要?共用的進 env.zsh,特定的進 local.zsh
  • typeset -U PATH (Zsh) 自動去除重複項目,避免多次 source 導致 PATH 不斷加長
1# ~/.config/zsh/env.zsh
2typeset -U PATH  # 去重
3
4# 自己的 script
5export PATH="$HOME/.local/bin:$PATH"
6export PATH="$HOME/bin:$PATH"

Plugin Manager 選型

Zsh plugin manager 的選擇很多,差異主要在載入速度和功能豐富度:

  • 無 plugin manager:直接 git clone plugin 到某個目錄,手動 source。最簡單、最透明、但更新要自己管
  • zinit(原 zplugin):載入速度最快(turbo mode 延遲載入)、功能最多、但配置語法學習曲線高
  • antidote:宣告式(一個 .zsh_plugins.txt 列出所有 plugin),概念簡單
  • sheldon:Rust 寫的、速度快、設定用 TOML

常用 plugin:

  • zsh-autosuggestions:根據歷史指令自動補全建議(灰色字,按右箭頭接受)
  • zsh-syntax-highlighting:指令行即時語法高亮
  • zsh-completions:額外的 tab 補全定義

Prompt 設計

Prompt 是每次按 Enter 都會看到的東西,值得花時間設計但不需要複雜。

基本款(不用框架):

1# 顯示目錄 + git branch
2autoload -Uz vcs_info
3precmd() { vcs_info }
4zstyle ':vcs_info:git:*' formats ' (%b)'
5PROMPT='%F{blue}%~%f%F{green}${vcs_info_msg_0_}%f %# '

框架款:Starship(跨 shell、用 TOML 設定、Rust 寫的速度快)是目前最常被推薦的 prompt 工具。它的配置進 ~/.config/starship.toml,也是 dotfile 的一部分。

Dotfile 結構對應

管理工具與目錄結構裡的 stow 目錄結構,shell 配置的對應:

 1~/dotfiles/
 2└── zsh/
 3    ├── .zshenv
 4    ├── .zshrc
 5    └── .config/
 6        └── zsh/
 7            ├── aliases.zsh
 8            ├── functions.zsh
 9            ├── plugins.zsh
10            ├── prompt.zsh
11            ├── tools.zsh
12            └── env.zsh

stow zsh 會在家目錄建立 .zshenv.zshrc 的 symlink,在 .config/zsh/ 下建立各模組檔案的 symlink。local.zsh 不在 repo 裡,各機器自己建。