Zsh 使用技巧速查:提升 50% 终端效率

Zsh 使用技巧速查:提升 50% 终端效率

hhermes|2026年6月9日3 阅读 · 7 分钟

Zsh 日常使用技巧速查:补全增强、历史搜索、Global Alias、通配符限定符、变量操作与插件推荐。

为什么 Zsh 值得学

Zsh 是功能最丰富的交互式 Shell 之一,开箱即用的补全、通配符和历史机制远超 Bash。本文整理日常高频使用的 Zsh 技巧,帮助你大幅提升命令行效率。


1. Tab 补全增强

Zsh 的补全系统是其最强大的特性,少量配置即可大幅提升体验。

大小写不敏感补全

bash 复制代码
# 输入 pdf 也能补全 PDF 文件
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'

菜单选择模式

bash 复制代码
# Tab 触发后用方向键在列表中挑选
zstyle ':completion:*' menu select

Fuzzy 匹配补全

bash 复制代码
# 输入 fbr 也能补全到 foobar
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'

补全缓存与颜色

bash 复制代码
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zcompcache
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

2. 历史搜索

前缀匹配(上下箭头)

bash 复制代码
# 输入 git 再按 ↑,只看以 git 开头的历史命令
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey '^[[A' up-line-or-beginning-search
bindkey '^[[B' down-line-or-beginning-search

历史扩展操作符

语法 含义 示例
!! 上一条完整命令 sudo !!
!$ 上一条的最后一个参数 mkdir foo && cd !$
!* 上一条的所有参数 echo a b cprint !*
!pattern 最近一条以 pattern 开头 !git
^old^new 替换上一条中的文本 ^foo^bar

历史配置

bash 复制代码
HISTSIZE=50000
SAVEHIST=50000
setopt HIST_IGNORE_ALL_DUPS   # 去重
setopt HIST_IGNORE_SPACE      # 空格开头不记录(适合敏感命令)
setopt SHARE_HISTORY           # 多终端共享历史

3. 别名系统

Global Alias — 可出现在命令任意位置

bash 复制代码
alias -g G='| grep'
alias -g L='| less'
alias -g H='| head'
alias -g W='| wc -l'
alias -g N='2>/dev/null'

# 使用
dmesg G usb          # dmesg | grep usb
find / -name "*.log" N W   # find ... 2>/dev/null | wc -l

Suffix Alias — 按扩展名自动选择程序

bash 复制代码
alias -s py=vim       # ./script.py 自动用 vim 打开
alias -s md=code      # README.md 用 VS Code
alias -s pdf=zathura  # .pdf 用 zathura

4. 通配符与限定符

Zsh 的通配符能力远超 Bash,无需 find 命令:

bash 复制代码
ls **/*.java              # 递归匹配所有 .java 文件
ls *(.)                   # 仅普通文件
ls *(/)                   # 仅目录
ls *(L+1m)               # 大于 1MB 的文件
ls *(m-7)                # 7 天内修改过的文件
ls *(om[1,5])            # 按修改时间排序取前 5 个
rm *(L0)                 # 删除空文件
ls ^*.bak                # 不以 .bak 结尾的文件(需 setopt EXTENDED_GLOB)

5. 变量操作

无需 sed / awk,Zsh 原生支持丰富的字符串操作:

bash 复制代码
name="hello_world.txt"
echo ${#name}           # 15(长度)
echo ${name%.txt}       # hello_world(删后缀)
echo ${name##*_}        # world.txt(删最长前缀)
echo ${name//_/ - }     # hello - world.txt(全局替换)
echo ${(U)name}         # HELLO_WORLD.TXT(转大写)
echo ${(L)name}         # hello_world.txt(转小写)

数组(从 1 开始!)

bash 复制代码
arr=(apple banana cherry)
echo ${arr[1]}          # apple(注意不是 0)
echo ${arr[-1]}         # cherry
echo ${arr[2,3]}        # banana cherry
echo ${^arr}.log        # apple.log banana.log cherry.log

6. 插件推荐

插件 功能 安装
zsh-autosuggestions 历史自动提示(灰色建议) zinit light zsh-users/zsh-autosuggestions
zsh-syntax-highlighting 实时语法高亮(有效=绿/无效=红) zinit light zsh-users/zsh-syntax-highlighting
fzf 模糊搜索(Ctrl+T/R 文件/历史) ~/.fzf/install
zoxide 智能目录跳转(替代 z/cd) cargo install zoxide

7. 快捷键速查

快捷键 功能
Ctrl+A 光标移到行首
Ctrl+E 光标移到行尾
Ctrl+W 删除光标前一个单词
Ctrl+U 删除光标前全部内容
Ctrl+K 删除光标后全部内容
Ctrl+Y 粘贴最近删除的内容
Alt+. 插入上一条命令的最后一个参数
Ctrl+R 增量搜索历史

总结

Zsh 的核心优势在于补全系统通配符。配置好 matcher-list + menu select + fzf,你的终端效率至少提升 50%。再加上 global alias 和变量操作,很多场景下你不再需要 findsedawk

© 2026 XV. 保留所有权利。