Zsh
本页介绍如何用 oh-my-zsh、插件和 Starship 配置 Zsh shell,以及如何排查常见的 PATH 问题。
安装#
按顺序安装 oh-my-zsh、插件和 Starship:
-
安装 oh-my-zsh:
-
把 zsh-autosuggestions 和 zsh-syntax-highlighting 克隆到 oh-my-zsh 的插件目录:
-
安装 Starship:
配置#
配置写在 ~/.zshrc 里。插件列表写在 source $ZSH/oh-my-zsh.sh 之前,其余配置写在它之后。
插件#
在 ~/.zshrc 里启用插件:
不启用 git 和 zsh-z 插件。git 别名在下面单独定义,目录跳转用下面的 i 函数。
提示符#
在 ~/.zshrc 里启用 Starship:
函数#
在 ~/.zshrc 里定义 i 函数:
i <目录> 跳到 ~/i 下的对应目录。
别名#
oh-my-zsh 自带 la='ls -lAh',以长格式列出包括隐藏项在内的所有文件。
Ubuntu 的 .bashrc 默认是 la='ls -A'。要得到同样的效果,在 ~/.bashrc 里改成:
在 ~/.zshrc 里加上 git 和 nr 的别名:
环境变量#
在 ~/.zshrc 里设置编辑器和 PATH:
uv、claude、codex、mise 的官方安装器都装到 ~/.local/bin。
语言运行时#
node、pnpm、java 等由 mise 管理。在 ~/.zshrc 里激活 mise:
bun 和 Maven 的配置:
其他启动文件#
Homebrew 写在 ~/.zprofile:
只给单条命令注入密钥#
.zshrc 里 export 的密钥,所有子进程都能读到。只在需要它的那条命令上临时注入:
故障排查#
脚本里的 PATH 和终端里不一样#
zsh 按以下顺序读取启动文件:
写在 .zshrc 里的 PATH 和 mise activate,ssh <主机> '<命令>'、LaunchAgent、CI 都读不到。macOS 的 path_helper 还会把系统路径整体提到最前,打乱 .zshenv 里设的顺序。
-
把 PATH 优先级写进
~/.zprofile,它在path_helper之后执行: -
验证交互和非交互 shell 的结果一致:
运行的不是预期的同名命令#
PATH 里排在前面的目录优先。列出所有在多个目录里重名的可执行文件:
常见的两种情况:
- uv 的 python 和 Homebrew 的 pip 不同源。
~/.local/bin只有python3的软链时,pip3会落到 Homebrew,装的包python3import 不到。改用python3 -m pip,或者把 uv python 目录下的pip也软链到~/.local/bin。 - 两个工具抢一个名字。 Cursor CLI 和 Grok 都会装一个
agent,PATH 里排在前面的生效。
参考#
- Guany config:Guany 的配置仓库。