什么是 Zsh?为什么要使用 Zsh

准备工作:检查系统版本与安装 Xcode Command Line Tools

在正式安装 Zsh 前,我们需要确认以下两点:

  1. 当前 macOS 系统版本。
  2. 是否已安装 Xcode Command Line Tools(提供 gitmakegcc 等编译工具)。
1. 检查 macOS 版本

打开「系统设置」(或「系统偏好设置」),点击「关于本机」,即可查看系统版本号。

sw_vers

输出示例:

ProductName:    macOS
ProductVersion: 13.4.1
BuildVersion:   22F82

只要 macOS 版本 ≥ 10.15,都支持 Zsh 默认。

2. 安装 Xcode Command Line Tools

大部分通过 Homebrew 安装软件包都需要 Xcode CLT 支持,否则会提示缺少编译工具。
打开「终端」(Terminal),执行:

xcode-select --install

如果尚未安装,会弹出安装提示,点击「安装」即可。
安装完成后,可以执行以下命令,确认是否安装成功:

xcode-select -p

如果能看到类似 /Library/Developer/CommandLineTools 路径,说明安装成功。

注意: 即使你不打算编译 C/C++ 项目,也建议安装 Xcode CLT,以免后续安装 Homebrew 或插件时报错。


安装 Homebrew:macOS 下的包管理器

Homebrew 是 macOS 上最常用的软件包管理工具,它可以简化安装常见开源工具、库、应用等流程。我们将使用 Homebrew 来安装最新 Zsh 以及后续插件、主题。

1. 检查是否已安装 Homebrew

在终端执行:

brew --version
2. 在 M 系列芯片 Mac 上安装 Homebrew

打开「终端」,执行官方一行安装脚本(2025 年最新方式):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装过程中会提示输入密码(即当前登录用户密码),输入后按回车。
安装完成后,需要将 Homebrew 路径添加到 PATH 环境变量中。M 系列 Mac 默认安装路径为 /opt/homebrew

# 将以下内容复制到 ~/.zprofile 或 ~/.zshrc 中
if [ -d /opt/homebrew/bin ]; then
  eval "$(/opt/homebrew/bin/brew shellenv)"
fi

# 保存并退出后,执行以下命令使之生效
source ~/.zprofile    # 或者 source ~/.zshrc

验证安装:

brew --version

应该输出类似:

Homebrew 4.0.0
Homebrew/homebrew-core (git revision xxx; last commit yyyy-mm-dd)
Homebrew/homebrew-cask (git revision xxx; last commit yyyy-mm-dd)

提示: 如果安装时遇到网络慢,可以考虑使用国内 Homebrew 镜像(如清华、阿里云等),但官方最新脚本已支持自动切换;若有需求,可以自行搜集国内镜像源信息并替换。

通过 Homebrew 安装最新 Zsh

完成 Homebrew 安装后,接下来使用 Homebrew 安装最新版 Zsh。

1. 搜索可用 Zsh 版本

在终端输入:

brew search zsh

会列出类似:

==> Formulae
zsh ✔
zsh-completions ✔
zsh-lovers
...
2. 安装 Zsh

在终端执行:

brew install zsh
3. 安装 zsh-completions(可选,但推荐)
brew install zsh-completions

Tip: 如果你将来需要其他插件或主题,也可通过 Homebrew 一起安装,如 brew install zsh-syntax-highlightingbrew install zsh-autosuggestions 等,本文后续章节将详细介绍。


将 Zsh 设置为默认 Shell

macOS 自带 Zsh,但我们刚刚通过 Homebrew 安装的 Zsh 路径为 /opt/homebrew/bin/zsh;要让系统默认使用最新安装的版本,需要将其添加到 /etc/shells 中并切换默认 Shell。

1. 查看已安装 Zsh 路径

在终端执行:

which zsh
2. 将新 Zsh 路径添加到 /etc/shells

打开终端,使用 sudo 权限编辑 /etc/shells

sudo nano /etc/shells

在文件末尾添加一行:

/opt/homebrew/bin/zsh

Control + O 保存,按 Control + X 退出。
示例修改后 /etc/shells 末尾

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash
/usr/local/bin/zsh
/opt/homebrew/bin/zsh    ← 新增此行

注意: 如果你之前曾在 /etc/shells 中添加过 /usr/local/bin/zsh(Intel Mac 常见路径),请确保只保留与你系统架构相匹配的路径。M 系列芯片使用 /opt/homebrew/bin/zsh

3. 修改默认 Shell

在终端执行:

chsh -s /opt/homebrew/bin/zsh

可能会提示输入密码,输入后回车。
关闭当前终端窗口,重新打开一个新的终端,此时再次执行:

echo $SHELL

如果输出 /opt/homebrew/bin/zsh,说明切换成功。
同时执行:

zsh --version

输出示例:

zsh 5.9.2 (x86_64-apple-darwin21.6.0)

或:

zsh 5.9.2 (arm64-apple-darwin21.6.0)

根据你的芯片架构显示 arm64x86_64。若显示 arm64,则表明你使用的是 M 系列芯片原生版本。
至此,系统默认 Shell 已切换为通过 Homebrew 安装的最新 Zsh。


安装并使用 Oh My Zsh(最流行的 Zsh 配置框架)

1. 什么是 Oh My Zsh?

Oh My Zsh 是一个开源社区维护的 Zsh 配置框架,集成了超过 200 个插件、150 多个主题、自动更新功能,一键安装即可拥有完善的基础配置和插件管理。

2. 安装 Oh My Zsh

确保已将 Zsh 设置为默认 Shell;若尚未设置,可参考上文“将 Zsh 设置为默认 Shell”。
在终端执行官方安装命令:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装过程会自动:

➜ %  

如果想验证 Oh My Zsh 是否成功安装,可执行:

upgrade_oh_my_zsh

这将检查更新并提示你当前为最新版本或正在升级。

3. 理解 ~/.zshrc 结构

安装完成后,打开 ~/.zshrc,你会发现日志注释很多、配置项丰富。下面是几个关键部分:

# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"

# Set name of the theme to load. (See ~/.oh-my-zsh/themes/*)
ZSH_THEME="robbyrussell"

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
plugins=(
  git
  z
  # 你可以根据需要添加更多插件
)

source $ZSH/oh-my-zsh.sh

# User configuration
export PATH="$HOME/bin:/usr/local/bin:$PATH"

# 其他自定义配置放在此处

小贴士: 每次修改完 ~/.zshrc 后,需执行 source ~/.zshrc 才能使新配置生效。


安装常用插件:zsh-autosuggestions、zsh-syntax-highlighting 等

除了 Oh My Zsh 内置插件外,还有很多优秀的第三方插件可以进一步提升使用体验。下面以两个常见插件为例演示安装与配置。

1. zsh-autosuggestions(命令自动补全建议)

功能:在你输入命令时,基于历史记录给出实时建议,按 → 方向键即可补全。
安装步骤
克隆到本地插件目录(推荐与 Oh My Zsh 放到一起):

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

编辑 ~/.zshrc,在 plugins=(...) 中添加 zsh-autosuggestions

plugins=(
  git
  z
  zsh-autosuggestions
  # 其他插件...
)

保存后执行:

source ~/.zshrc

测试:在终端输入部分历史命令,如 git sta,会自动显示建议为 git status,按 → 键即可快速补全。

2. zsh-syntax-highlighting(语法高亮)

功能:对命令行输入的内容进行实时语法高亮,命令正确时显示绿色,错误或未知命令时显示红色。
安装步骤
克隆到本地:

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

编辑 ~/.zshrc,在 plugins=(...) 中添加 zsh-syntax-highlighting,注意要将其放在同类型插件的最后面:

plugins=(
  git
  z
  zsh-autosuggestions
  zsh-syntax-highlighting
)

保存后执行:

source ~/.zshrc

测试:在终端输入一个不存在的命令,如 gti status,会显示红色;输入 git status(正确命令),显示绿色。

3. 其他推荐插件

安装并配置 Powerlevel10k 主题,美化终端外观

Powerlevel10k 是当前最流行、功能最强大的 Zsh 主题之一,支持极高自定义度、图标显示、状态栏信息等,且性能极佳。本文将介绍如何在 M 系列 Mac 上安装并配置 Powerlevel10k。

先决条件:

1. 安装 Nerdfont 字体
  1. 访问 Nerd Fonts 官方 GitHub(或镜像)。
  2. 下载一个你喜欢的 Nerd Font,例如 MesloLGS NF 系列(Meslo LG S for Powerline)。
  3. 双击下载的 .ttf 文件,点击「安装字体」。
  4. 在 iTerm2/Terminal 中设置默认字体为刚刚安装的 Nerd Font:
    • iTerm2:打开「偏好设置」→「Profiles」→「Text」→「Change Font」,选择 MesloLGS NF
    • Terminal.app:打开「终端」→「偏好设置」→「Profiles」→「Text」→「Font」→「Change」,选择该字体。
2. 安装 Powerlevel10k

克隆 Powerlevel10k 仓库到 Oh My Zsh 的自定义主题目录:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

编辑 ~/.zshrc,将 ZSH_THEME 的值改为 powerlevel10k/powerlevel10k

ZSH_THEME="powerlevel10k/powerlevel10k"

保存后执行:

source ~/.zshrc

第一次加载时,Powerlevel10k 会进入配置向导(Wizard),让你选择想要的样式与信息项:

❯ ~/Projects/myrepo on git:main ◒ 12:34:56 PM
➜ 

配置提示:


进阶配置:自定义 .zshrc、环境变量、alias 等

到此,你已经安装了最新 Zsh、Oh My Zsh、常用插件以及 Powerlevel10k 主题。接下来,我们进一步讲解如何对 ~/.zshrc 进行个性化配置,让你的终端更符合个人习惯。

1. 常用环境变量设置

~/.zshrc 的末尾(source $ZSH/oh-my-zsh.sh 之后),添加常用环境变量:

# ===================================
# 用户自定义配置区(将放在文件最后)
# ===================================

# 设置编辑器为 VSCode
export EDITOR='code --wait'

# 自定义 PATH,例如将 ~/bin、~/.local/bin 添加到 PATH
export PATH="$HOME/bin:$HOME/.local/bin:$PATH"

# Go 语言环境
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"

# Node.js 环境(若已通过 nvm 管理,可忽略)
export PATH="/usr/local/share/npm/bin:$PATH"

# Python 虚拟环境自动加载
export WORKON_HOME="$HOME/.virtualenvs"
export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/local/bin/virtualenvwrapper.sh

# 其他自定义环境变量...

注意:

2. alias(命令别名)示例

通过设置常用别名,可以减少重复敲击。例如:

# Git 相关别名
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --decorate --graph'

# 常用目录快速进入
alias www='cd ~/www'
alias docs='cd ~/Documents'

# ll、la、l 目录列表展示
alias ll='ls -lah'
alias la='ls -A'
alias l='ls -CF'

# 快速重载 Zsh 配置
alias reload='source ~/.zshrc'

# 编辑 .zshrc
alias ezsh='code ~/.zshrc'

# 查找端口占用(macOS)
alias psg='lsof -i :'

# 其他别名...

将上述别名粘贴到 ~/.zshrc 自定义区,保存并 source ~/.zshrc 后即可生效。使用别名时,直接在终端输入 gs 即可等同于 git status,大幅提高效率。

3. 函数(Functions)示例

对更复杂的日常操作,使用函数比 alias 更灵活。例如:

# 定期清理无用文件的函数
cleanup() {
  echo "开始清理系统缓存..."
  sudo rm -rf /Library/Caches/*
  sudo rm -rf ~/Library/Caches/*
  echo "清理完成!"
}

# 快速创建并进入项目目录
mkcd() {
  if [ -z "$1" ]; then
    echo "请提供目录名称,例如:mkcd new_project"
  else
    mkdir -p "$1"
    cd "$1" || return
  fi
}

# 结合fzf实现历史命令搜索
fh() {
  BUFFER=$(history | fzf +s | sed 's/ *[0-9]* *//')
  zle accept-line
}
zle -N fh
bindkey '^R' fh

常见问题及排查方法

在实际使用过程中,可能会遇到以下一些常见问题。下面罗列并给出相应的解决思路。

问题 1:chsh: /opt/homebrew/bin/zsh: non-login shell: /etc/shells 报错

原因:尝试将不在 /etc/shells 中的路径设置为默认 Shell。
解决步骤
确保已将 /opt/homebrew/bin/zsh 添加到 /etc/shells

sudo sh -c 'echo /opt/homebrew/bin/zsh >> /etc/shells'

再次执行:

chsh -s /opt/homebrew/bin/zsh
问题 2:iTerm2 或 Terminal 显示乱码或图标不对

原因:未正确安装或配置 Nerd Font。
解决方案

  1. 确认已正确安装 Nerd Font(如 MesloLGS NF)。
  2. 在 iTerm2/Terminal 的「偏好设置」→「Profiles」→「Text」中,将字体设置为你安装的 Nerd Font。
  3. 若仍显示方块或乱码,可尝试重新下载并安装最新 Nerd Font。
问题 3:source ~/.zshrc 后没有效果(插件不生效/主题不生效)

排查思路
确保 ~/.zshrc 文件末尾没有语法错误,特别是引号和括号是否成对。
执行以下命令,查看当前 Shell 是否为你希望的 Zsh:

echo $SHELL

输出应为 /opt/homebrew/bin/zsh
检查 ~/.zshrc 中的 source $ZSH/oh-my-zsh.sh 是否存在且无拼写错误。
若使用 Oh My Zsh 外部插件,需要在 plugins=(...)fpath 中正确添加插件路径。
重新打开终端或执行 exec zsh,以启动一个新的 Zsh 会话。

问题 4:插件安装后提示 zsh: command not found: xxx

可能原因及应对

brew install fzf
$(brew --prefix)/opt/fzf/install
问题 5:Powerlevel10k 配置向导无法启动

原因可能有

  1. 没有正确设置字体,导致图标显示异常而卡死。
  2. 网络问题,未能下载部分资源。
    解决
    确保已安装 Nerd Font,并已在终端应用里生效。
    在终端执行:
p10k configure

或者手动编辑 ~/.p10k.zsh,注释掉某些不兼容选项。
若仍无法启动,可以临时切换到较简单的主题,如 ZSH_THEME="agnoster",排查是否为 Powerlevel10k 本身问题。


附录:完整示例 ~/.zshrc 配置(模板)

# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"

# Set name of the theme to load.
ZSH_THEME="powerlevel10k/powerlevel10k"

# 开启自动更新功能(每次打开终端时检查更新)
DISABLE_AUTO_UPDATE="false"

# 添加插件列表
plugins=(
  git
  z
  zsh-autosuggestions
  zsh-syntax-highlighting
  brew
  autojump
)

source $ZSH/oh-my-zsh.sh

# User configuration
# -----------------------------------
# 自定义 PATH
export PATH="$HOME/bin:$HOME/.local/bin:/opt/homebrew/bin:$PATH"

# 编辑器
export EDITOR='code --wait'

# Go 环境
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"

# Python 虚拟环境
export WORKON_HOME="$HOME/.virtualenvs"
export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source $(which virtualenvwrapper.sh)

# alias 示例
alias ll='ls -lah'
alias la='ls -A'
alias l='ls -CF'
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --decorate --graph'
alias reload='source ~/.zshrc'
alias ezsh='code ~/.zshrc'

# 函数示例
mkcd() {
  if [ -z "$1" ]; then
    echo "请提供目录名称,例如:mkcd new_project"
  else
    mkdir -p "$1"
    cd "$1" || return
  fi
}

cleanup() {
  echo "开始清理系统缓存..."
  sudo rm -rf /Library/Caches/*
  sudo rm -rf ~/Library/Caches/*
  echo "清理完成!"
}

# fzf 历史命令搜索
if type fzf &> /dev/null; then
  fh() {
    BUFFER=$(history | fzf +s | sed 's/ *[0-9]* *//')
    zle accept-line
  }
  zle -N fh
  bindkey '^R' fh
fi

# Powerlevel10k 强制回归配置样式(可选)
if [[ -f ~/.p10k.zsh ]]; then
  source ~/.p10k.zsh
fi

# 其他自定义配置...

你可以将上面的内容复制并粘贴到 ~/.zshrc,根据自己的环境(如 Python、Go、Node 等)进行修改即可。