Skip to Content
OSTerminalzimfw

使用 zimfw 配置 zsh

zimfw 比 oh my zsh 更轻量,适合把 zsh plugin、Starship 和 zoxide 的 shell integration 统一交给 zimfw module 管理。现在主方案是 Starship + zoxide + fzf,powerlevel10k 只作为备份方案保留。

安装 zsh 和基础工具

Debian / Ubuntu

sudo apt install -y zsh git curl chroma fzf chsh -s "$(command -v zsh)"

zoxide 可以用官方安装脚本安装到 ~/.local/bin

curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh

如果已经用 nix profile 管理用户态工具,也可以直接用 nix 安装。

nix profile add nixpkgs#zoxide

如果 ~/.local/bin 没有在 PATH 里,先加到 ~/.zshrc

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

macOS

brew install zsh git curl chroma fzf zoxide chsh -s "$(command -v zsh)"

Starship binary 的安装和 starship.toml 配置看 Starship 配置

安装 zimfw

curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh

Zim install 会生成一批默认 module,例如 environmentgitinputtermtitleutilityzsh-completionscompletionzsh-syntax-highlightingzsh-history-substring-searchzsh-autosuggestions。这些默认配置保留即可,不要重复追加。

只把自己额外需要的 module 放到 ~/.zimrc 末尾。

cat <<'EOF' >> ~/.zimrc zmodule joke/zim-starship zmodule antoineco/zim-zoxide zmodule zimfw/ssh zmodule romkatv/zsh-defer EOF zimfw install

注意不要在 ~/.zimrc 里同时加载 powerlevel10k、asciiship、zimfw 自带 theme 或其他 prompt / theme module。joke/zim-starship 会初始化 Starship,所以不要再在 ~/.zshrc 里写 eval "$(starship init zsh)"。同理,antoineco/zim-zoxide 会初始化 zoxide,所以不要再重复写 eval "$(zoxide init zsh)"。两个地方一起启用容易出现重复 prompt、样式错乱或初始化顺序问题。

如果使用 Zim install 默认生成的 .zimrc,还要确认 Prompt 这一段保持注释状态。 asciiship 是 prompt 本体,duration-infogit-info 是给 asciiship 用的辅助信息。 使用 Starship 时不要打开它们。

# Exposes to prompts how long the last command took to execute, used by asciiship. #zmodule duration-info # Exposes git repository status information to prompts, used by asciiship. #zmodule git-info # A heavily reduced, ASCII-only version of the Spaceship and Starship prompts. #zmodule asciiship

配置 zsh

下面是自用配置。systemctljournalctl 相关 alias 只适合 Linux,macOS 上可以删掉。

cat <<'EOF' >> ~/.zshrc # ============================================================ # fzf # ============================================================ # fzf key bindings and completion if command -v fzf >/dev/null 2>&1 && fzf --zsh >/dev/null 2>&1; then source <(fzf --zsh) fi # ============================================================ # Python venv # ============================================================ activate_venv() { local venv_path="${1:-.venv}" local candidate local activate="" local candidates=( "$venv_path" "$venv_path/bin/activate" "$venv_path/.venv/bin/activate" ) for candidate in "${candidates[@]}"; do if [[ -f "$candidate" ]]; then activate="$candidate" break fi done if [[ -z "$activate" ]]; then print -u2 "No virtual environment activation script found for '$venv_path'." return 1 fi source "$activate" } deactivate_venv() { if (( $+functions[deactivate] )); then deactivate return fi print "No active Python virtual environment." } alias venv="activate_venv" alias va="activate_venv" alias vde="deactivate_venv" # ============================================================ # Aliases # ============================================================ # zoxide alias j="z" alias ji="zi" # Git alias g="git" alias gct="git commit" alias gs="git stash" alias gr1="git reset --soft HEAD~1" alias gp="git pull" alias ggp="git push" alias gaa="git add ." alias gch="git checkout" # JavaScript runtime alias nr="npm run" alias br="bun run" alias bx="bunx" # Python alias uvpy="uv run python" alias uvpip="uv pip" # Linux systemd alias sdr="systemctl daemon-reload" alias sr="systemctl restart" alias jl="journalctl -o cat -fu" # Tools alias ard="aria2c --summary-interval=10 -x 3 --allow-overwrite=true -Z" EOF source ~/.zshrc

如果之前用过 autojump,可以把历史数据导入 zoxide。

zoxide import --from=autojump ~/.local/share/autojump/autojump.txt

备份方案:Powerlevel10k

如果要临时回退到 p10k,只保留一个 prompt。启用 p10k 时,把 ~/.zimrc 里的 zmodule joke/zim-starship 注释掉;切回 Starship 时,再从 ~/.zimrc 移除或注释 zmodule romkatv/powerlevel10k

cat <<'EOF' >> ~/.zimrc zmodule romkatv/powerlevel10k EOF zimfw install p10k configure
Last updated on