Zsh 终端美化与效率配置:我的 .zshrc 全解析

Zsh 终端美化与效率配置:我的 .zshrc 全解析

这篇笔记完整记录了我的 Zsh 配置,包括环境变量、别名、插件、提示符等。算是给自己留个备份,换电脑时直接拷贝就能用。


配置文件概览

我的终端配置涉及这几个文件:

文件作用
~/.zshrcZsh 主配置文件
~/.zsh_plugins.txtZsh 插件列表
~/.config/starship.toml提示符配置(可选)
~/.config/mise/config.toml语言版本配置
~/.gitconfigGit 配置

下面逐个讲解。


环境变量配置

外置硬盘路径

我把开发环境都放在外置硬盘上,所以首先定义基础路径:

1
2
3
4
5
# 外置硬盘挂载点
export EXTERNAL_DRIVE="/Volumes/DataDisk"

# 开发环境根目录
export DEV_ENV_PATH="${EXTERNAL_DRIVE}/DevEnv"

启动时检查硬盘是否在线:

1
2
3
if [[ ! -d "$EXTERNAL_DRIVE" ]]; then
echo "⚠️ 警告: 未检测到外置 DataDisk,所有开发工具及环境变量已失效!"
fi

这样如果忘记插硬盘,一打开终端就会提醒我。

mise 版本管理器

mise 的数据目录也放在外置硬盘:

1
2
export MISE_DATA_DIR="${DEV_ENV_PATH}/mise"
export MISE_CACHE_DIR="${DEV_ENV_PATH}/mise/cache"

各语言的缓存目录

把各种包管理器的缓存都重定向到外置硬盘,不占系统盘空间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Node.js / pnpm
export NPM_CONFIG_CACHE="${DEV_ENV_PATH}/caches/npm"
export PNPM_HOME="${DEV_ENV_PATH}/caches/pnpm"
export PATH="$PNPM_HOME:$PATH"

# Python / pip / uv
export PIP_CACHE_DIR="${DEV_ENV_PATH}/caches/pip"
export UV_CACHE_DIR="${DEV_ENV_PATH}/caches/uv"

# Rust / Cargo
export CARGO_HOME="${DEV_ENV_PATH}/caches/cargo"
export RUSTUP_HOME="${DEV_ENV_PATH}/caches/rustup"
export PATH="$CARGO_HOME/bin:$PATH"

# Java / Maven / Gradle
export MAVEN_OPTS="-Dmaven.repo.local=${DEV_ENV_PATH}/caches/maven"
export GRADLE_USER_HOME="${DEV_ENV_PATH}/caches/gradle"

这样做的好处:

  1. 系统盘保持清爽,不会被各种缓存塞满
  2. 换电脑时,拷贝外置硬盘就能恢复所有环境
  3. 缓存集中管理,清理方便

密码管理

pass 的存储目录:

1
export PASSWORD_STORE_DIR="${EXTERNAL_DRIVE}/MySecretDrive"

别名配置

别名是提升效率的关键,我按用途分类配置。

基础增强

1
2
3
4
5
alias c="clear"
alias h="history"
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."

这几个太常用了,少打几个字。

现代化 CLI 工具替代

用新工具替代系统自带的:

1
2
3
4
5
6
7
8
# bat 替代 cat
alias cat="bat"

# eza 替代 ls
alias ls="eza"
alias ll="eza -l"
alias la="eza -la"
alias lt="eza --tree"

设置完后,输入 cat 实际调用的是 bat,无缝替换,不用改变习惯。

ripgrep 快捷方式

1
2
3
4
5
6
7
8
9
10
11
# 不区分大小写
alias rgi="rg -i"

# 搜索包含隐藏文件
alias rgh="rg --hidden"

# 只列出文件名
alias rgf="rg --files-with-matches"

# 显示上下文
alias rgc="rg -C 3"

xh HTTP 工具

1
2
3
4
alias http="xh"
alias get="xh get"
alias post="xh post"
alias header="xh --headers"

jless JSON 查看器

1
alias js="jless"

Git 快捷操作

这组别名我每天都在用:

1
2
3
4
5
6
7
8
9
10
alias gs="git status"
alias ga="git add"
alias gc="git commit"
alias gp="git push"
alias gl="git pull"
alias gd="git diff"
alias gco="git checkout"
alias gb="git branch"
alias glg="git log --graph --oneline --decorate"
alias lg="lazygit"

最后一个 lg 启动 lazygit,图形化操作 Git。

Docker 快捷操作

1
2
3
4
5
6
alias dps="docker ps"
alias dpa="docker ps -a"
alias di="docker images"
alias dcu="docker-compose up -d"
alias dcd="docker-compose down"
alias dcl="docker-compose logs -f"

路径快速跳转

1
2
alias proj="cd ${EXTERNAL_DRIVE}/Projects"
alias dev="cd ${DEV_ENV_PATH}"

一个命令跳到常用目录。


自定义函数

mkfile —— 创建文件并自动创建父目录

1
2
3
mkfile() {
mkdir -p "$(dirname "$1")" && touch "$1"
}

使用

1
mkfile src/components/Button/index.tsx

会自动创建 src/components/Button/ 目录,然后创建 index.tsx 文件。


插件配置

插件管理器:antidote

我用 antidote 管理 Zsh 插件,比 oh-my-zsh 轻量。

.zshrc 里加载:

1
2
source $(brew --prefix)/share/antidote/antidote.zsh
antidote load ~/.zsh_plugins.txt

插件列表

~/.zsh_plugins.txt 内容:

1
2
3
4
5
6
7
8
# 语法高亮(输错命令会变红)
zsh-users/zsh-syntax-highlighting

# 自动建议(根据历史记录灰色显示建议,按右箭头补全)
zsh-users/zsh-autosuggestions

# 补全增强(按 Tab 时显示漂亮的菜单)
zsh-users/zsh-completions

这三个插件效果:

zsh-syntax-highlighting

  • 正确的命令显示绿色
  • 错误的命令显示红色
  • 路径存在显示下划线

zsh-autosuggestions

  • 输入命令时,会根据历史记录显示灰色的建议
  • 键接受整个建议
  • Ctrl + → 接受一个单词

zsh-completions

  • 按 Tab 时显示菜单式的补全选项
  • 可以用方向键选择
  • 比默认的补全好看很多

工具初始化

这些工具需要在 .zshrc 里初始化。

zoxide(智能 cd)

1
eval "$(zoxide init zsh)"

初始化后可以用 z 命令跳转目录:

1
2
z projects    # 跳转到包含 "projects" 的目录
zi # 交互式选择

starship(提示符美化)

1
eval "$(starship init zsh)"

初始化后,提示符会显示:

  • 当前目录
  • Git 分支和状态(有修改会显示 *
  • 语言版本(进入 Python 项目显示 Python 版本)
  • 上一条命令的执行时间
  • 错误状态(上一条命令失败会变红)

fzf(模糊搜索)

1
source <(fzf --zsh)

初始化后获得三个快捷键:

  • Ctrl + R:搜索历史命令
  • Ctrl + T:搜索文件
  • Alt + C:搜索目录并 cd

mise(版本管理)

1
eval "$(mise activate zsh)"

注意:mise 的初始化要放在最后,确保 PATH 优先级最高。


完整的 .zshrc

把上面的内容整合起来,这是我完整的 .zshrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# .zshrc - 我的 Zsh 配置文件

# ==============================================================================
# 1. 基础路径定义与挂载检查
# ==============================================================================

export EXTERNAL_DRIVE="/Volumes/DataDisk"
export DEV_ENV_PATH="${EXTERNAL_DRIVE}/DevEnv"

if [[ ! -d "$EXTERNAL_DRIVE" ]]; then
echo "⚠️ 警告: 未检测到外置 DataDisk,所有开发工具及环境变量已失效!"
fi

export MISE_DATA_DIR="${DEV_ENV_PATH}/mise"
export MISE_CACHE_DIR="${DEV_ENV_PATH}/mise/cache"

# ==============================================================================
# 2. 编程语言运行时与包管理器重定向
# ==============================================================================

# Node.js
export NPM_CONFIG_CACHE="${DEV_ENV_PATH}/caches/npm"
export PNPM_HOME="${DEV_ENV_PATH}/caches/pnpm"
export PATH="$PNPM_HOME:$PATH"

# Python
export PIP_CACHE_DIR="${DEV_ENV_PATH}/caches/pip"
export UV_CACHE_DIR="${DEV_ENV_PATH}/caches/uv"

# Rust
export CARGO_HOME="${DEV_ENV_PATH}/caches/cargo"
export RUSTUP_HOME="${DEV_ENV_PATH}/caches/rustup"
export PATH="$CARGO_HOME/bin:$PATH"

# Java
export MAVEN_OPTS="-Dmaven.repo.local=${DEV_ENV_PATH}/caches/maven"
export GRADLE_USER_HOME="${DEV_ENV_PATH}/caches/gradle"

# 密码管理
export PASSWORD_STORE_DIR="${EXTERNAL_DRIVE}/MySecretDrive"

# ==============================================================================
# 3. 别名配置
# ==============================================================================

# 基础增强
alias c="clear"
alias h="history"
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."

# 现代化 CLI 工具
alias cat="bat"
alias ls="eza"
alias ll="eza -l"
alias la="eza -la"
alias lt="eza --tree"

# xh
alias http="xh"
alias get="xh get"
alias post="xh post"
alias header="xh --headers"

# ripgrep
alias rgi="rg -i"
alias rgh="rg --hidden"
alias rgf="rg --files-with-matches"
alias rgc="rg -C 3"

# jless
alias js="jless"

# Git
alias gs="git status"
alias ga="git add"
alias gc="git commit"
alias gp="git push"
alias gl="git pull"
alias gd="git diff"
alias gco="git checkout"
alias gb="git branch"
alias glg="git log --graph --oneline --decorate"
alias lg="lazygit"

# Docker
alias dps="docker ps"
alias dpa="docker ps -a"
alias di="docker images"
alias dcu="docker-compose up -d"
alias dcd="docker-compose down"
alias dcl="docker-compose logs -f"

# 路径跳转
alias proj="cd ${EXTERNAL_DRIVE}/Projects"
alias dev="cd ${DEV_ENV_PATH}"

# ==============================================================================
# 4. 自定义函数
# ==============================================================================

mkfile() { mkdir -p "$(dirname "$1")" && touch "$1" }

# ==============================================================================
# 5. 插件与工具初始化
# ==============================================================================

# zoxide
eval "$(zoxide init zsh)"

# antidote 插件管理
source $(brew --prefix)/share/antidote/antidote.zsh
antidote load ~/.zsh_plugins.txt

# starship 提示符
eval "$(starship init zsh)"

# fzf 模糊搜索
source <(fzf --zsh)

# mise 版本管理(放在最后)
eval "$(mise activate zsh)"

Git 配置

顺便记录一下我的 ~/.gitconfig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[user]
name = Prorise
email = 3381292732@qq.com

[core]
editor = code --wait
autocrlf = input
pager = delta

[interactive]
diffFilter = delta --color-only

[delta]
navigate = true
line-numbers = true
side-by-side = true

[credential]
helper = osxkeychain

[alias]
lg = log --graph --oneline --all --decorate

关键配置:

  • pager = delta:用 delta 美化 diff 输出
  • side-by-side = true:并排显示新旧代码
  • credential helper:用 macOS 钥匙串存储密码

mise 配置

~/.config/mise/config.toml

1
2
3
4
5
6
7
8
[tools]
deno = "latest"
java = "graalvm-community-21.0.2"
maven = "latest"
node = "22"
python = "3.13"
rust = "latest"
uv = "latest"

这样配置后,mise 会自动安装和管理这些语言版本。


日常使用流程

打开终端

  1. 终端启动,加载 .zshrc
  2. 检查外置硬盘是否在线
  3. starship 显示漂亮的提示符
  4. 准备就绪

导航目录

1
2
3
4
5
6
7
# 用 zoxide 快速跳转
z proj # 跳到 Projects 目录
z my-app # 跳到 my-app 项目

# 或者用别名
proj # 跳到 Projects
dev # 跳到 DevEnv

查看文件

1
2
3
4
5
6
7
8
# 查看文件内容(自动语法高亮)
cat README.md

# 列出文件(带图标和颜色)
la

# 树状显示
lt

搜索

1
2
3
4
5
6
7
8
# 搜索文件
fd test

# 搜索内容
rg "TODO"

# 模糊搜索历史命令
Ctrl + R

Git 操作

1
2
3
4
5
6
7
8
9
10
# 查看状态
gs

# 启动 lazygit
lg

# 或者用命令
ga .
gc -m "feat: add new feature"
gp

备份与恢复

需要备份的文件

1
2
3
4
5
~/.zshrc
~/.zsh_plugins.txt
~/.gitconfig
~/.config/mise/config.toml
~/.config/starship.toml(如果有自定义)

恢复步骤

  1. 安装 Homebrew
  2. 安装必要的工具:
    1
    brew install bat eza fd ripgrep fzf zoxide starship antidote mise lazygit git-delta
  3. 拷贝配置文件
  4. 重新打开终端

这套配置我用了很久,每次换电脑都是直接拷贝恢复。如果你也想打造类似的终端环境,可以参考这个配置,按需调整。