Zsh 是一个强大的 shell,提供了比 Bash 更加智能的命令补全、丰富的主题和插件支持,并且完全兼容 Bash 脚本。从 macOS Catalina 开始,Zsh 已成为 macOS 的默认 shell。本文将介绍 Zsh 的基本配置与使用技巧,以及如何通过插件和自定义设置提升命令行效率。
1. Zsh 简介
Zsh 于 1990 年发布,比 Bash 晚一年。相较于 Bash,Zsh 提供了许多性能与功能上的改进,尤其是在命令补全、插件管理以及个性化配置方面。虽然初期配置较为复杂,但随着 Oh-My-Zsh 等工具的出现,Zsh 的配置变得更为简便,广受开发者欢迎。
为什么选择 Zsh?
- 完全兼容 Bash:Zsh 完全兼容 Bash 脚本,现有的 Bash 脚本在 Zsh 下也可以正常运行。
- 强大的命令补全:Zsh 提供比 Bash 更加智能和全面的命令补全,支持命令、目录、路径、大小写自动修正等。
- 丰富的主题与插件:Zsh 支持多种主题和插件,使得开发环境更具个性化与高效性。
2. 在 macOS 中使用 Zsh
设置 Zsh 为默认 shell
从 macOS Catalina 版开始,zsh 已成为默认 shell。你可以通过以下步骤将 zsh 设置为默认 shell:
-
打开终端,输入以下命令:
shellchsh -s /bin/zsh
-
退出终端并重新登录,Zsh 将成为默认 shell。
查看系统支持的 Shell
shell
cat /etc/shells
输出示例:
shell
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
3. 安装 Oh-My-Zsh
Oh-My-Zsh 是 Zsh 配置框架,提供了丰富的主题和插件,极大地提升了 Zsh 的易用性和美观性。
安装命令
shell
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
4. 更改 Zsh 主题
查看可用主题
Oh-My-Zsh 提供了多种主题,访问 主题列表 查看可用主题。
快速修改主题
在 ~/.zshrc
文件中修改 ZSH_THEME
配置项:
shell
sed -i '/^ZSH_THEME=.*/c ZSH_THEME="ys"' ~/.zshrc
5. Zsh 别名(Alias)
Zsh 允许你为常用命令创建别名,使操作更加简便。以下是一些常见的 git
别名示例:
shell
alias g='git'
alias ga='git add'
alias gaa='git add --all'
alias gapa='git add --patch'
alias gau='git add --update'
alias gav='git add --verbose'
alias gap='git apply'
alias gapt='git apply --3way'
自定义别名
你可以在 ~/.zshrc
文件中添加自定义别名,例如:
shell
alias ll='ls -lahFT'
使用函数替代复杂命令
Zsh 支持函数替代复杂的命令。例如,创建一个在特定目录下跳转并列出文件的命令:
shell
function gstatus {
git status
echo "Changes in the last 5 commits:"
git log -n 5 --stat
}
执行 gstatus
时,会自动显示 Git 状态和最近 5 次提交的修改记录。
6. Zsh 自动补全功能
Zsh 的自动补全功能非常强大,支持命令、文件、目录以及命令参数的补全。
内置自动补全功能
- 目录自动补全 :输入
cd
后按 Tab 键,Zsh 会列出当前目录下的所有目录,继续按 Tab 键可以完成目录名称的补全。 - 路径简写补全 :例如输入
cd /u/l/b
后按 Tab 键,Zsh 会自动补全为/usr/local/bin
。 - 自动大小写修正 :输入
cd de
后按 Tab 键,Zsh 会自动补全为cd Desktop
。 - 命令补全 :输入
kubectl
后按 Tab 键,Zsh 会列出所有可用命令。 - 命令参数自动补全 :例如输入
kill
后按 Tab 键,Zsh 会显示所有正在运行的进程 ID。
安装 zsh-completions
插件
zsh-completions
插件提供了补充 Zsh 中没有的命令补全功能,例如 Homebrew 的补全支持。
shell
git clone --depth=1 https://github.com/zsh-users/zsh-completions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-completions
安装 zsh-autosuggestions
插件
zsh-autosuggestions
会根据历史命令记录实时提供补全建议,按右箭头键(→)即可补全。
shell
git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-autosuggestions
在 ~/.zshrc
中启用插件:
ini
plugins=(
git
zsh-autosuggestions
)
7. 使用 fzf
增强命令搜索
fzf
是一个命令行模糊搜索工具,可以与 Zsh 集成,提高命令查找的效率。
安装 fzf
shell
brew install fzf
在 ~/.zshrc
中启用:
bash
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
使用 fzf
进行历史命令搜索
按 Ctrl + r
时,Zsh 会启用 fzf
提供的模糊搜索界面,帮助你快速找到历史命令。
8. 使用 autojump
快速跳转目录
autojump
允许你根据目录的使用频率快速跳转到目标目录。
安装 autojump
shell
brew install autojump
在 ~/.zshrc
中启用:
shell
source $(brew --prefix)/etc/profile.d/autojump.sh
之后,你可以通过输入部分目录名并使用 j
命令来快速跳转:
shell
j proj # 跳转到最近的 "proj" 目录
10. Zsh 历史管理
Zsh 允许你高效地管理历史命令,可以设置命令忽略、搜索历史等。
配置历史行为
在 ~/.zshrc
中设置:
shell
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_SPACE
使用 Ctrl + r
快速搜索历史
按 Ctrl + r
后,Zsh 会显示匹配的历史命令,继续按 Ctrl + r
查找更多匹配项。
11. 提升命令行交互体验
禁用特定命令的历史记录
你可以通过在命令前加空格来禁止其记录到历史文件:
shell
rm -rf /some/dir # 不会记录到历史中
安装 zsh-syntax-highlighting 插件
该插件能够高亮显示命令语法的正确性,帮助你快速发现错误。
shell
git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
在 ~/.zshrc
中启用插件:
ini
plugins=(
git
zsh-syntax-highlighting
)