zsh

Z Shell,自 macOS Catalina(2019)起成为 macOS 默认 Shell,同时广泛用于 Linux。兼容 bash 语法,并提供更强的补全、插件生态和配置能力。更通用的终端、登录 Shell 与 chsh 等说明见 终端与Shell;家目录与点文件组织见 文件系统

配置文件加载顺序

登录 Shell:~/.zprofile → ~/.zshrc
交互 Shell:~/.zshrc
文件用途
~/.zshrc交互式配置(别名、插件、主题)
~/.zprofile登录时执行(环境变量)
~/.zshenv所有 Shell 都加载(最先执行)

变量

name="World"              # 赋值
echo "Hello, $name!"
echo "Hello, ${name}!"    # 推荐加花括号
 
export PATH="$HOME/bin:$PATH"   # 导出环境变量
unset name                       # 删除变量

配置 Homebrew 时常在 ~/.zshrc 加入 eval "$(brew shellenv)",见 Homebrew

数组

fruits=("apple" "banana" "cherry")
echo $fruits[1]           # zsh 数组从 1 开始
echo $#fruits             # 数组长度
echo $fruits[@]           # 所有元素
 
# 追加
fruits+=("date")

补全系统

zsh 补全比 bash 更强大,支持菜单选择:

# 在 ~/.zshrc 中启用
autoload -Uz compinit && compinit
 
# 补全菜单选择
zstyle ':completion:*' menu select
 
# 大小写不敏感补全
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

常用内置功能

全局别名

alias -g L="| less"
alias -g G="| grep"
 
# 使用
ls -la L        # 等同于 ls -la | less
cat log.txt G error

目录跳转

# 直接输入目录名跳转(无需 cd)
setopt AUTO_CD
 
# 目录栈
dirs -v         # 查看目录栈
cd -1           # 跳回上一目录
cd -2           # 跳回第二个目录

扩展 glob

# 递归匹配
ls **/*.md              # 所有子目录下的 md 文件
 
# 排除匹配
ls ^*.md                # 非 md 文件
 
# 按修改时间
ls *(om[1,5])           # 最近修改的 5 个文件

Oh My Zsh

最流行的 zsh 配置框架,提供主题和插件管理。安装需联网拉取脚本;若超时或失败,可结合 网络配置 检查代理或 DNS。

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

常用插件

# ~/.zshrc
plugins=(
  git              # git 别名和补全
  z                # 智能目录跳转
  zsh-autosuggestions       # 命令建议(需单独安装)
  zsh-syntax-highlighting   # 语法高亮(需单独安装)
  docker           # docker 补全
  npm              # npm 补全
)

安装第三方插件

# zsh-autosuggestions(输入时显示历史建议)
git clone https://github.com/zsh-users/zsh-autosuggestions \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
 
# zsh-syntax-highlighting(命令语法高亮)
git clone https://github.com/zsh-users/zsh-syntax-highlighting \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

常用主题

主题特点
robbyrussell默认主题,简洁
agnosterGit 状态显示,需 Nerd Font
powerlevel10k高度可定制,性能强(需单独安装)
# ~/.zshrc
ZSH_THEME="robbyrussell"

Powerlevel10k

性能最强的 zsh 主题,首次运行向导自动配置。

# 安装(Oh My Zsh)
git clone --depth=1 https://github.com/romkatv/powerlevel10k \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
 
# ~/.zshrc
ZSH_THEME="powerlevel10k/powerlevel10k"
 
# 重新配置向导
p10k configure

与 bash 的主要差异

特性zshbash
数组下标从 1 开始从 0 开始
补全菜单选择,更强大基础 Tab 补全
主题/插件Oh My Zsh 生态丰富较少
glob 扩展更丰富基础
macOS 默认是(Catalina+)否(旧版默认)

相关链接