完整配置文件

# ==============================================================================
# .zshrc - Zsh 配置文件
# 环境: macOS (Intel) + Ghostty + Zsh
# 最后更新: 2026-02-07
# ==============================================================================
 
# 性能分析工具(调试时取消注释)
# zmodload zsh/zprof
 
# ------------------------------------------------------------------------------
# 1. 基础环境变量
# ------------------------------------------------------------------------------
 
# Homebrew 前缀检测(修复:显式检测路径)
if [[ -d /opt/homebrew ]]; then
  export HOMEBREW_PREFIX="/opt/homebrew"  # Apple Silicon
elif [[ -d /usr/local/Homebrew ]] || [[ -x /usr/local/bin/brew ]]; then
  export HOMEBREW_PREFIX="/usr/local"     # Intel Mac
else
  echo "⚠️  Homebrew not found, some features may not work"
  export HOMEBREW_PREFIX="/usr/local"     # 默认值
fi
 
# 编辑器设置
export EDITOR='code'
export VISUAL='code'
 
# 语言环境
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
 
# pnpm 配置
export PNPM_HOME="$HOME/Library/pnpm"
 
# 启用真彩色(Ghostty 支持)
export COLORTERM=truecolor
 
# ------------------------------------------------------------------------------
# 2. PATH 配置
# ------------------------------------------------------------------------------
# typeset -U 自动去重,避免 PATH 膨胀
# zsh 中小写 path 数组与大写 PATH 自动同步
 
typeset -U path
path=(
  "$HOME/.local/bin"           # 用户本地二进制
  "$HOME/bin"                  # 用户脚本
  "$PNPM_HOME"                 # pnpm 全局包
  "$HOMEBREW_PREFIX/bin"       # Homebrew 二进制
  "$HOMEBREW_PREFIX/sbin"      # Homebrew 系统二进制
  $path                        # 保留系统默认路径
)
export PATH
 
# ------------------------------------------------------------------------------
# 3. 补全系统
# ------------------------------------------------------------------------------
# Homebrew 安装的工具补全(git, docker, kubectl 等)
if [[ -d "$HOMEBREW_PREFIX/share/zsh/site-functions" ]]; then
  FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:$FPATH"
fi
 
# 初始化补全系统(带缓存优化)
autoload -Uz compinit
 
# 每 24 小时重新生成补全缓存,其他时间跳过检查加速启动
local zcompdump="$HOME/.zcompdump"
if [[ ! -f "$zcompdump" ]] || [[ -n "$zcompdump"(#qnmh24-|qN.mh+24) ]]; then
  compinit
else
  compinit -C  # 跳过安全检查,加速启动
fi
 
# 补全样式配置
zstyle ':completion:*' menu select                    # 菜单选择模式
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'  # 大小写不敏感
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} # 补全着色
zstyle ':completion:*:descriptions' format '%B%d%b'   # 分组描述加粗
zstyle ':completion:*:warnings' format 'No matches for: %d'  # 无匹配提示
 
# ------------------------------------------------------------------------------
# 4. 历史记录
# ------------------------------------------------------------------------------
HISTFILE=~/.zsh_history
HISTSIZE=50000                 # 内存中保留条数
SAVEHIST=50000                 # 文件中保存条数
 
setopt HIST_IGNORE_DUPS        # 忽略连续重复命令
setopt HIST_IGNORE_SPACE       # 忽略空格开头的命令(隐私保护)
setopt HIST_REDUCE_BLANKS      # 移除多余空白
setopt SHARE_HISTORY           # 多终端共享历史
setopt EXTENDED_HISTORY        # 记录时间戳
setopt HIST_VERIFY             # 历史展开后先显示不立即执行
 
# ------------------------------------------------------------------------------
# 5. Shell 选项
# ------------------------------------------------------------------------------
setopt AUTO_CD                 # 输入目录名自动 cd
setopt AUTO_PUSHD              # cd 自动压栈,可用 popd 返回
setopt PUSHD_IGNORE_DUPS       # pushd 去重
setopt CORRECT                 # 命令拼写纠正
setopt INTERACTIVE_COMMENTS    # 允许交互模式下使用 # 注释
setopt NO_BEEP                 # 禁用蜂鸣
setopt GLOB_DOTS               # 通配符匹配隐藏文件
 
# ------------------------------------------------------------------------------
# 6. SSH Agent(智能启动)
# ------------------------------------------------------------------------------
ssh_agent_start() {
  local ssh_env_file="${XDG_RUNTIME_DIR:-$HOME/.cache}/ssh-agent.env"
  
  # 如果已有可用的 agent,直接返回
  if [[ -n "$SSH_AUTH_SOCK" ]] && ssh-add -l >/dev/null 2>&1; then
    return 0
  fi
  
  # 尝试加载已有的 agent 环境
  if [[ -f "$ssh_env_file" ]]; then
    source "$ssh_env_file" >/dev/null
    # 验证加载的 agent 是否有效
    if ssh-add -l >/dev/null 2>&1; then
      return 0
    fi
  fi
  
  # 启动新的 agent(8小时超时)
  mkdir -p "$(dirname "$ssh_env_file")"
  ssh-agent -t 8h > "$ssh_env_file"
  source "$ssh_env_file" >/dev/null
  
  # 添加常用密钥(静默失败)
  local keys=(~/.ssh/{id_ed25519,id_rsa})
  for key in "${keys[@]}"; do
    [[ -f "$key" ]] && ssh-add "$key" 2>/dev/null
  done
}
 
# 同步启动(确保可用性),如果觉得慢可以改成 ssh_agent_start &!
ssh_agent_start
 
# ------------------------------------------------------------------------------
# 7. 开发工具(延迟加载优化启动速度)
# ------------------------------------------------------------------------------
 
# pyenv - Python 版本管理(首次调用时初始化)
if [[ -d "$HOME/.pyenv" ]]; then
  pyenv() {
    unset -f pyenv
    export PYENV_ROOT="$HOME/.pyenv"
    path=("$PYENV_ROOT/bin" $path)
    eval "$(command pyenv init - zsh)"
    eval "$(pyenv virtualenv-init -)" 2>/dev/null
    pyenv "$@"
  }
fi
 
# fnm - Node.js 版本管理(按需加载)
if command -v fnm &>/dev/null; then
  eval "$(fnm env --use-on-cd)"
fi
 
# SDKMAN - Java/Kotlin/Scala 版本管理(延迟加载)
export SDKMAN_DIR="$HOME/.sdkman"
if [[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]]; then
  # 延迟加载函数
  sdk() {
    unset -f sdk
    source "$SDKMAN_DIR/bin/sdkman-init.sh"
    sdk "$@"
  }
fi
 
# ------------------------------------------------------------------------------
# 8. 别名
# ------------------------------------------------------------------------------
 
# 文件操作(安全 + 增强)
alias ll='ls -lah'
alias la='ls -A'
alias l='ls -CF'
alias rm='rm -i'               # 删除前确认
alias cp='cp -i'               # 覆盖前确认
alias mv='mv -i'               # 覆盖前确认
 
# 目录导航
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias -- -='cd -'              # 返回上一个目录
 
# Git 常用
alias g='git'
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gcm='git commit -m'
alias gca='git commit --amend'
alias gp='git push'
alias gl='git pull'
alias gd='git diff'
alias gdc='git diff --cached'
alias gco='git checkout'
alias gcb='git checkout -b'
alias gb='git branch'
alias gbd='git branch -d'
alias glog='git log --oneline --graph --decorate -15'
alias gloga='git log --oneline --graph --decorate --all -20'
alias gst='git stash'
alias gstp='git stash pop'
alias grb='git rebase'
alias grbi='git rebase -i'
alias gcp='git cherry-pick'
 
# 实用工具
alias cls='clear'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias df='df -h'
alias du='du -h'
alias reload='source ~/.zshrc && echo "✓ .zshrc reloaded"'
alias path='echo $PATH | tr ":" "\n" | nl'  # 显示 PATH(每行一个)
alias serve='python3 -m http.server'        # 快速启动静态服务器
alias ports='lsof -i -P | grep LISTEN'      # 查看监听的端口
 
# macOS 特定
alias showfiles='defaults write com.apple.finder AppleShowAllFiles YES; killall Finder'
alias hidefiles='defaults write com.apple.finder AppleShowAllFiles NO; killall Finder'
alias cleanup='find . -type f -name "*.DS_Store" -ls -delete'  # 删除 .DS_Store
 
# ------------------------------------------------------------------------------
# 9. 自定义函数
# ------------------------------------------------------------------------------
 
# 创建目录并进入
mkcd() {
  mkdir -p "$1" && cd "$1"
}
 
# 快速查找文件
ff() {
  find . -type f -name "*$1*" 2>/dev/null
}
 
# 快速查找目录
fd() {
  find . -type d -name "*$1*" 2>/dev/null
}
 
# 显示 PATH(每行一个,带序号)
showpath() {
  echo "$PATH" | tr ':' '\n' | nl
}
 
# 提取压缩文件(智能识别格式)
extract() {
  if [[ -f "$1" ]]; then
    case "$1" in
      *.tar.bz2) tar xjf "$1" ;;
      *.tar.gz)  tar xzf "$1" ;;
      *.bz2)     bunzip2 "$1" ;;
      *.rar)     unrar x "$1" ;;
      *.gz)      gunzip "$1" ;;
      *.tar)     tar xf "$1" ;;
      *.tbz2)    tar xjf "$1" ;;
      *.tgz)     tar xzf "$1" ;;
      *.zip)     unzip "$1" ;;
      *.Z)       uncompress "$1" ;;
      *.7z)      7z x "$1" ;;
      *)         echo "'$1' 无法被 extract() 解压" ;;
    esac
  else
    echo "'$1' 不是有效文件"
  fi
}
 
# 快速切换到项目目录(根据你的实际情况修改)
proj() {
  local projects_dir="$HOME/Projects"
  if [[ -z "$1" ]]; then
    cd "$projects_dir"
  else
    cd "$projects_dir/$1"
  fi
}
 
# 查找占用端口的进程
port() {
  if [[ -z "$1" ]]; then
    echo "Usage: port <port_number>"
    return 1
  fi
  lsof -i ":$1"
}
 
# 杀死占用端口的进程
killport() {
  if [[ -z "$1" ]]; then
    echo "Usage: killport <port_number>"
    return 1
  fi
  lsof -ti ":$1" | xargs kill -9
}
 
# ------------------------------------------------------------------------------
# 10. 插件加载(通过 Homebrew 安装)
# ------------------------------------------------------------------------------
# 安装: brew install zsh-autosuggestions zsh-syntax-highlighting
 
# zsh-autosuggestions: 历史命令灰色提示
if [[ -f "$HOMEBREW_PREFIX/share/zsh-autosuggestions/zsh-autosuggestions.zsh" ]]; then
  source "$HOMEBREW_PREFIX/share/zsh-autosuggestions/zsh-autosuggestions.zsh"
  
  # autosuggestions 配置
  ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'           # 提示颜色(灰色)
  ZSH_AUTOSUGGEST_STRATEGY=(history completion)    # 策略:历史优先,其次补全
  ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20               # 超长命令不提示
fi
 
# zsh-syntax-highlighting: 命令语法高亮
# ⚠️ 必须放在最后加载,确保能正确高亮其他配置
if [[ -f "$HOMEBREW_PREFIX/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" ]]; then
  source "$HOMEBREW_PREFIX/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
fi
 
# ------------------------------------------------------------------------------
# 11. Ghostty 终端集成
# ------------------------------------------------------------------------------
if [[ "$TERM_PROGRAM" == "ghostty" ]]; then
  # Ghostty shell 集成(如果存在)
  if [[ -f "$HOME/.config/ghostty/shell-integration.zsh" ]]; then
    source "$HOME/.config/ghostty/shell-integration.zsh"
  fi
fi
 
# ------------------------------------------------------------------------------
# 12. 本地配置(可选,不纳入版本控制)
# ------------------------------------------------------------------------------
# 用于存放机器特定配置、API 密钥等敏感信息
# 示例内容:
# - export OPENAI_API_KEY="sk-..."
# - export DATABASE_URL="postgresql://..."
# - alias work='cd ~/WorkProjects'
[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local
 
# ------------------------------------------------------------------------------
# 13. 性能分析(调试用)
# ------------------------------------------------------------------------------
# 取消下面的注释可查看启动性能分析
# zprof
 
# ==============================================================================
# End of .zshrc
# 
# 快速参考:
# - reload          重新加载配置
# - showpath        显示 PATH
# - mkcd <dir>      创建并进入目录
# - extract <file>  智能解压文件
# - port <number>   查看端口占用
# - killport <num>  杀死端口进程
# - proj [name]     切换到项目目录
# ==============================================================================
 

新增功能

更完善的 Git 别名

alias gcm='git commit -m'          # 快速提交
alias gca='git commit --amend'     # 修改上次提交
alias gcb='git checkout -b'        # 创建并切换分支
alias gbd='git branch -d'          # 删除分支
alias gdc='git diff --cached'      # 查看暂存区差异
alias gloga='git log --all'        # 查看所有分支日志
alias gst='git stash'              # 暂存
alias gstp='git stash pop'         # 恢复暂存
alias grb='git rebase'             # 变基
alias grbi='git rebase -i'         # 交互式变基
alias gcp='git cherry-pick'        # 拣选提交

实用工具函数

# 智能解压(自动识别格式)
extract <file>
 
# 查找占用端口的进程
port 3000
 
# 杀死占用端口的进程
killport 3000
 
# 快速切换项目目录
proj myproject
 
# 查找目录
fd <dirname>

macOS 特定别名

alias showfiles='...'              # 显示隐藏文件
alias hidefiles='...'              # 隐藏文件
alias cleanup='...'                # 清理 .DS_Store
alias ports='lsof -i -P | grep LISTEN'  # 查看监听端口

SDKMAN 支持(Java 开发)

# 延迟加载 SDKMAN(首次调用 sdk 命令时初始化)
sdk list java
sdk install java 21.0.1-tem

性能优化

1. 补全缓存检测更严谨

# 修复:先检查文件是否存在
local zcompdump="$HOME/.zcompdump"
if [[ ! -f "$zcompdump" ]] || [[ -n "$zcompdump"(#qnmh24-|qN.mh+24) ]]; then
  compinit
else
  compinit -C
fi

2. SSH Agent 启动优化

  • 增加了已有 agent 的验证逻辑
  • 避免重复启动
  • 改为同步启动(更可靠,如需异步可改回 &!

3. FPATH 安全检查

if [[ -d "$HOMEBREW_PREFIX/share/zsh/site-functions" ]]; then
  FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:$FPATH"
fi

终端集成

1. Ghostty 集成

if [[ "$TERM_PROGRAM" == "ghostty" ]]; then
  if [[ -f "$HOME/.config/ghostty/shell-integration.zsh" ]]; then
    source "$HOME/.config/ghostty/shell-integration.zsh"
  fi
fi

2. 真彩色支持

export COLORTERM=truecolor

配置改进

1. 补全样式增强

zstyle ':completion:*:warnings' format 'No matches for: %d'

2. 历史记录优化

setopt HIST_VERIFY  # 历史展开后先显示不立即执行

3. Shell 选项增强

setopt GLOB_DOTS    # 通配符匹配隐藏文件

4. 目录导航改进

alias -- -='cd -'   # 返回上一个目录

调试工具

1. 性能分析

# 在文件开头取消注释:
# zmodload zsh/zprof
 
# 在文件末尾取消注释:
# zprof

使用指南

安装依赖插件

brew install zsh-autosuggestions zsh-syntax-highlighting

可选工具

# Node.js 版本管理
brew install fnm
 
# Python 版本管理
brew install pyenv
 
# Java 版本管理
curl -s "https://get.sdkman.io" | bash

创建本地配置文件(可选)

# 创建 ~/.zshrc.local 存放机器特定配置
touch ~/.zshrc.local
 
# 示例内容:
echo 'export OPENAI_API_KEY="sk-..."' >> ~/.zshrc.local
echo 'alias work="cd ~/WorkProjects"' >> ~/.zshrc.local

快速参考命令

命令说明
reload重新加载配置
showpath显示 PATH(每行一个)
mkcd <dir>创建并进入目录
extract <file>智能解压文件
port <number>查看端口占用
killport <number>杀死端口进程
proj [name]切换到项目目录
ff <pattern>查找文件
fd <pattern>查找目录
cleanup删除 .DS_Store 文件
ports查看所有监听端口

迁移步骤

  1. 备份现有配置

    cp ~/.zshrc ~/.zshrc.backup
  2. 替换配置文件

    # 将新的 .zshrc 复制到 ~
    cp /path/to/new/.zshrc ~/.zshrc
  3. 重新加载

    source ~/.zshrc
    # 或直接运行
    reload
  4. 验证 Homebrew 路径

    echo $HOMEBREW_PREFIX
    # 应输出: /usr/local (Intel) 或 /opt/homebrew (Apple Silicon)
  5. 测试插件

    # 输入命令应该有语法高亮
    git status
     
    # 输入历史命令应该有灰色提示
    ls -l

注意事项

  1. 项目目录函数proj() 函数默认指向 $HOME/Projects,请根据实际情况修改

  2. SSH Agent:改为同步启动,如果觉得启动慢可以改回异步:

    ssh_agent_start &!
  3. 性能分析:如需查看启动性能,取消注释 zprof 相关行

  4. 本地配置:敏感信息(API Key、密码等)请放在 ~/.zshrc.local