Skip to Content
OSTerminal统一 zsh 配置

统一 zsh 配置

这份配置用于 Linux 和 macOS 共用。把它放在 zsh framework 初始化之后:zimfw 先完成 ~/.zim/init.zsh 初始化,oh my zsh 先完成 source $ZSH/oh-my-zsh.sh,再放下面这段。

zsh_defer_or_run 只检测当前 shell 里是否已经有 zsh-defer function,不主动加载 zsh-defer 文件。没有 zsh-defer 时会同步执行,保证同一份配置可以兜底运行。

配置片段

cat <<'EOF' >> ~/.zshrc # ============================================================ # Core # ============================================================ [[ ":$PATH:" == *":$HOME/.local/bin:"* ]] || export PATH="$HOME/.local/bin:$PATH" export NVM_DIR="$HOME/.nvm" zsh_defer_or_run() { if (( $+functions[zsh-defer] )); then zsh-defer "$@" else "$@" fi } zsh_optional_eval() { local init_script init_script="$("$@" 2>/dev/null)" || return 0 [[ -n "$init_script" ]] && eval "$init_script" } zsh_optional_source() { source "$1" >/dev/null 2>&1 || return 0 } # ============================================================ # Deferred optional integrations # ============================================================ zsh_defer_or_run zsh_optional_eval fzf --zsh zsh_defer_or_run zsh_optional_eval zoxide init zsh zsh_defer_or_run zsh_optional_source "$NVM_DIR/nvm.sh" zsh_defer_or_run zsh_optional_source "$NVM_DIR/bash_completion" # ============================================================ # 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" # Tools alias ard="aria2c --summary-interval=10 -x 3 --allow-overwrite=true -Z" if [[ "$OSTYPE" == linux* ]]; then alias sdr="systemctl daemon-reload" alias sr="systemctl restart" alias jl="journalctl -o cat -fu" fi # ============================================================ # Prompt # ============================================================ # 如果没有使用 zimfw 的 joke/zim-starship,再启用这一行。 # Starship 是 prompt 初始化,不建议用 zsh-defer 延迟加载。 # eval "$(starship init zsh)" EOF source ~/.zshrc

加载策略

fzfzoxidenvm 都是 optional integration,失败时静默跳过。它们缺失或版本不支持 不应该打断 shell startup。

alias、PATHNVM_DIR、venv function 和 Linux-only alias 同步定义。这些配置几乎没有启动 性能成本,同步加载可以保证打开 shell 后立即可用。

Starship 不做 deferred loading。使用 zimfw 时推荐交给 zmodule joke/zim-starship;使用 oh my zsh 或裸 zsh 时,在配置末尾取消 eval "$(starship init zsh)" 的注释。

专项工具的 function 仍放在各自页面,例如 nix 的 nxinxsnxgc 这类 helper 继续放在 nix 页面

Last updated on