AI 工程师的 dotfiles——提升效率的终端配置分享
2026/4/30大约 6 分钟
AI 工程师的 dotfiles——提升效率的终端配置分享
适读人群:AI 工程师、后端开发者 | 阅读时长:约 13 分钟 | 核心价值:真实在用的终端配置,专门针对 AI 开发工作流优化
有人问我,你每天用 Claude Code 工作,最离不开的是什么配置?
我想了一下,大概是我花了两年时间慢慢积累下来的 dotfiles。
dotfiles 这个东西,每个人的都不一样,因为它完全是根据自己的工作方式定制的。我分享的这些配置,不是为了炫技,是因为每一个都在我的日常 AI 开发工作流里有具体的使用场景。
我的工具链
先说清楚我用的基础工具,后面的配置都基于这套:
- Shell: zsh + Oh My Zsh
- 终端: Warp(主力)+ iTerm2(备用)
- 编辑器: VS Code + Cursor(AI 相关开发主力)
- AI CLI: Claude Code
- 包管理: Homebrew(macOS)
- Python: mise + uv
- 版本控制: git + lazygit(TUI)
zsh 配置:.zshrc 核心部分
# ~/.zshrc
# ===== 基础配置 =====
export EDITOR="code --wait" # 默认编辑器
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
# 历史记录配置(太少很痛苦)
HISTSIZE=100000
SAVEHIST=100000
HISTFILE=~/.zsh_history
setopt HIST_IGNORE_DUPS # 不记录重复命令
setopt HIST_IGNORE_SPACE # 以空格开头的命令不记录(临时命令)
setopt SHARE_HISTORY # 多个终端窗口共享历史
# ===== Oh My Zsh 插件 =====
plugins=(
git
zsh-autosuggestions # 命令自动补全建议
zsh-syntax-highlighting # 命令行语法高亮
fzf # 模糊搜索
docker
kubectl
)
# ===== 工具集成 =====
# mise(版本管理)
eval "$(mise activate zsh)"
# fzf(模糊搜索,改变 Ctrl+R 的行为)
eval "$(fzf --zsh)"
export FZF_DEFAULT_COMMAND='fd --hidden --follow --exclude .git'
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'
# zoxide(比 cd 好用的目录跳转)
eval "$(zoxide init zsh)"
alias cd="z" # 用 zoxide 替代 cdAI 开发专用 alias
这是核心部分。我把高频的 AI 开发操作都做了简化:
# ~/.config/zsh/ai-aliases.zsh
# (在 .zshrc 里 source 这个文件)
# ===== Claude Code =====
alias cc="claude" # Claude Code 主命令
alias ccc="claude --continue" # 继续上次对话
alias ccp="claude --print" # 非交互模式,输出到终端
# Claude Code 常用场景快捷方式
alias ccr="claude 'review this code for bugs and potential issues'"
alias cce="claude 'explain what this code does'"
alias ccf="claude 'fix the error'" # 遇到报错,直接扔给 Claude
# ===== LLM API 快速调用 =====
# 快速问 ChatGPT(不用开浏览器)
ask() {
local prompt="$*"
curl -s https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d "{
\"model\": \"gpt-4o-mini\",
\"messages\": [{\"role\": \"user\", \"content\": \"$prompt\"}],
\"max_tokens\": 1000
}" | jq -r '.choices[0].message.content'
}
# 用 Claude API 问问题(便宜的 haiku 模型,适合快速查询)
askc() {
local prompt="$*"
curl -s https://api.anthropic.com/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d "{
\"model\": \"claude-haiku-4-5\",
\"max_tokens\": 1024,
\"messages\": [{\"role\": \"user\", \"content\": \"$prompt\"}]
}" | jq -r '.content[0].text'
}
# 翻译到中文(高频使用,技术文档看英文累了)
trans() {
askc "把以下内容翻译成中文,保留技术术语:$*"
}
# ===== 文本处理 =====
# 把文件内容复制到剪贴板(准备粘贴给 AI)
cpfile() {
cat "$1" | pbcopy
echo "Copied to clipboard: $1 ($(wc -l < "$1") lines)"
}
# 把当前目录的代码结构复制到剪贴板(给 AI 提供上下文)
cpstructure() {
find . -type f \
-not -path "./.git/*" \
-not -path "./.venv/*" \
-not -path "./node_modules/*" \
-not -path "./__pycache__/*" \
| sort | pbcopy
echo "Project structure copied to clipboard"
}Python AI 开发快捷命令
# ~/.config/zsh/python-aliases.zsh
# ===== uv 常用操作 =====
alias uvs="uv sync" # 同步依赖
alias uva="uv add" # 添加依赖
alias uvr="uv run" # 运行脚本
alias uvp="uv run python" # 运行 Python
alias uvi="uv run python -i" # 进入交互 Python
# 快速启动 Jupyter
jup() {
uv run jupyter lab --no-browser --port ${1:-8888}
}
# 快速跑一个测试文件
pt() {
uv run pytest "$@" -v --tb=short
}
# ===== 向量数据库操作 =====
# 检查 Milvus 状态
alias milvus-status="docker ps --filter name=milvus --format 'table {{.Names}}\t{{.Status}}'"
# 快速启动本地 Milvus(用 Docker Compose)
milvus-start() {
docker-compose -f ~/docker/milvus/docker-compose.yml up -d
echo "Milvus started. Waiting for health..."
sleep 5
curl -s localhost:9091/healthz
}
# ===== 环境变量管理 =====
# 加载 .env 文件到当前 shell(调试用)
loadenv() {
local env_file="${1:-.env}"
if [ -f "$env_file" ]; then
export $(grep -v '^#' "$env_file" | xargs)
echo "Loaded $env_file"
else
echo "File not found: $env_file"
fi
}
# 检查 AI API Key 是否设置
checkkeys() {
local keys=("OPENAI_API_KEY" "ANTHROPIC_API_KEY" "COHERE_API_KEY" "HUGGINGFACE_TOKEN")
for key in "${keys[@]}"; do
if [ -n "${!key}" ]; then
echo "OK $key (${#${!key}} chars)"
else
echo "MISSING $key"
fi
done
}git 工作流配置
AI 项目的 git 工作流有点特殊,因为有很多大文件(模型权重、数据集)需要用 git-lfs,而且 prompt 和配置文件的版本管理很重要。
# ~/.config/zsh/git-aliases.zsh
# 基础 git 缩写
alias g="git"
alias gs="git status"
alias ga="git add"
alias gc="git commit"
alias gp="git push"
alias gl="git log --oneline --graph --decorate -20"
alias gd="git diff"
alias gds="git diff --staged"
# AI 项目常用
alias gaa="git add -A"
alias gcm="git commit -m"
# lazygit(TUI git 客户端,比命令行 git 直观很多)
alias lg="lazygit"
# 快速提交
# 用法:gcq "fix: 修复 embedding 维度不匹配的问题"
gcq() {
git add -A && git commit -m "$*"
}
# 查看 AI 相关文件的变更
alias gdprompt="git diff -- '*.md' '*.txt' '*.json' | grep -E '(prompt|system|instruction)' -A 5 -B 2"
# .gitignore 快速检查(确认敏感文件不会被提交)
alias gitcheck="git ls-files --others --exclude-standard"终端效率工具配置
# ~/.config/zsh/tools.zsh
# ===== 文件操作 =====
alias ls="eza --icons" # 替代 ls,支持图标
alias ll="eza -la --icons --git" # 详细列表,带 git 状态
alias lt="eza -la --tree --level=2 --icons" # 树形显示
alias cat="bat" # 替代 cat,有语法高亮
alias grep="rg" # 替代 grep,用 ripgrep
# ===== 网络调试 =====
# 检查 API 可用性
ping-openai() {
curl -s -o /dev/null -w "%{http_code} %{time_total}s" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
https://api.openai.com/v1/models
echo ""
}
# 显示 curl 的详细时间统计
curltime() {
curl -w "@-" -o /dev/null -s "$@" <<'EOF'
time_namelookup: %{time_namelookup}s\n
time_connect: %{time_connect}s\n
time_appconnect: %{time_appconnect}s\n
time_pretransfer: %{time_pretransfer}s\n
time_redirect: %{time_redirect}s\n
time_starttransfer: %{time_starttransfer}s\n
----------\n
time_total: %{time_total}s\n
EOF
}
# ===== 系统监控 =====
alias top="htop"
# GPU 使用情况(如果有 NVIDIA GPU)
alias gpu="watch -n1 nvidia-smi"
# 监控 Python 进程的内存使用
pymem() {
ps aux | grep python | grep -v grep | awk '{print $2, $4, $11}' | sort -k2 -rn
}环境变量管理:.env.local 方案
我的 API Key 管理方案——不用 secrets manager,但也不把 Key 存在 .zshrc 里:
# ~/.zshrc 末尾加上这个
# 加载本地私有环境变量(这个文件不进 git)
if [ -f "$HOME/.env.local" ]; then
set -a # 自动 export
source "$HOME/.env.local"
set +a
fi~/.env.local 的内容:
# ~/.env.local(不进 git,不分享)
# AI API Keys
OPENAI_API_KEY=sk-proj-...
ANTHROPIC_API_KEY=sk-ant-...
COHERE_API_KEY=...
# 开发环境变量
DATABASE_URL=postgresql://localhost:5432/dev
REDIS_URL=redis://localhost:6379
# 代理(如果需要的话)
# HTTP_PROXY=http://127.0.0.1:7890
# HTTPS_PROXY=http://127.0.0.1:7890这个方案的好处:换电脑的时候,只需要把 .env.local 复制过去,而不用担心 Key 被提交到 git。
dotfiles 的同步管理
这些配置文件都存在我的私有 git 仓库里:
~/dotfiles/
├── .zshrc
├── .gitconfig
├── config/
│ ├── zsh/
│ │ ├── ai-aliases.zsh
│ │ ├── python-aliases.zsh
│ │ ├── git-aliases.zsh
│ │ └── tools.zsh
│ └── mise/
│ └── config.toml
└── install.sh # 一键部署脚本install.sh 用 symlink 的方式安装,修改 ~/dotfiles 里的文件,对应的系统配置立即生效:
#!/bin/bash
# install.sh
DOTFILES_DIR="$HOME/dotfiles"
# 创建 symlink
ln -sf "$DOTFILES_DIR/.zshrc" "$HOME/.zshrc"
ln -sf "$DOTFILES_DIR/.gitconfig" "$HOME/.gitconfig"
# 创建目录结构
mkdir -p "$HOME/.config/zsh"
for f in "$DOTFILES_DIR/config/zsh/"*.zsh; do
ln -sf "$f" "$HOME/.config/zsh/$(basename $f)"
done
echo "Dotfiles installed successfully"换新电脑,三步搞定环境:
- 装 Homebrew
brew install git zsh mise uv fzf zoxide eza bat ripgrepgit clone git@github.com:xxx/dotfiles.git && cd dotfiles && ./install.sh
配置是活的,这些是我现在的状态,半年后可能又变了。真正有价值的不是别人的配置,是你在日常工作中发现"这个操作我每天要做十次"然后把它缩短到两个字母的那个过程。
