完整配置文件
# ==============================================================================
# .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
fi2. 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
fi2. 真彩色支持
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 | 查看所有监听端口 |
迁移步骤
-
备份现有配置
cp ~/.zshrc ~/.zshrc.backup -
替换配置文件
# 将新的 .zshrc 复制到 ~ cp /path/to/new/.zshrc ~/.zshrc -
重新加载
source ~/.zshrc # 或直接运行 reload -
验证 Homebrew 路径
echo $HOMEBREW_PREFIX # 应输出: /usr/local (Intel) 或 /opt/homebrew (Apple Silicon) -
测试插件
# 输入命令应该有语法高亮 git status # 输入历史命令应该有灰色提示 ls -l
注意事项
-
项目目录函数:
proj()函数默认指向$HOME/Projects,请根据实际情况修改 -
SSH Agent:改为同步启动,如果觉得启动慢可以改回异步:
ssh_agent_start &! -
性能分析:如需查看启动性能,取消注释
zprof相关行 -
本地配置:敏感信息(API Key、密码等)请放在
~/.zshrc.local中