🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

学习 Zsh 的基本命令与便捷功能(补全、历史、通配)

在上一篇文章中,我们安装了 Oh My Zsh,想必您的 Zsh 环境在外观和功能上都有了极大的提升。虽然别名、主题和插件带来的定制化是 Zsh 的巨大魅力,但实际上,即便不依赖这些外部工具,Zsh 本身也内置了许多非常强大和便捷的功能

许多从 Bash 等其他 Shell 迁移过来的用户之所以会成为 Zsh 的忠实粉丝,很大程度上是因为其“标准功能”的智能与贴心。感觉就像身边随时有一位优秀的秘书,能预判您的工作并提供支持。

本文将聚焦于 Zsh 与生俱来的三大强大支柱——“补全功能”、“历史功能”和“通配功能(文件名展开)”,并解说其具体用法。我们保证,只要您熟练运用这些功能,您的命令行工作效率将会更上一层楼,变得更快、更舒适!


1. 媲美输入法联想的智能!Zsh的“补全功能”

要说 Zsh 的杀手级功能,那非“补全功能”莫属。只需按下 Tab 键,它就能提供远超简单文件名补全的、惊人智能的辅助。

补全命令的选项

“这个命令有哪些可用的选项来着……”从此您再也无需为此查阅手册。只需在命令后输入 -,然后按下 Tab 键,它就会列出所有可用的选项。

$ ls -[按Tab键]
--all                             -A --almost-all                 -B --ignore-backups
--author                          -d --directory                  -D --dired
--color                           -F --classify                   -G --no-group
...(省略)...

更有甚者,您还可以用方向键选择候选项,它甚至会显示每个选项的功能说明。


根据上下文切换补全候选项

Zsh 能理解您当前正在输入的命令需要什么,并智能地切换补全候选项。

例如,在用于终止进程的 kill 命令后按下 Tab 键,它会列出当前正在运行的进程名作为候选项,而不是文件名。

$ kill [按Tab键]
101 zsh      102 login    103 top      104 sshd
...

2. 搔到痒处的“历史功能”

用于重复使用已执行命令的历史功能,Zsh 也远比 Bash 智能。

增量式历史搜索

当您想“再次使用之前输入过的那个长长的 git 命令……”时,只需在 Zsh 中输入命令的开头部分(例如:git),然后按 ↑(上箭头)键试试看。

这样,它不会从整个命令历史中搜索,而是只在以 git 开头的命令历史中进行回溯搜索。这能让您以压倒性的速度快速找到目标命令。

重新执行上一条命令 `!!`

!! 是一个特殊的别名,它会直接展开为上一条执行的命令。它最能大显身手的场景,莫过于忘记加 sudo 的时候。

$ apt update
E: Could not open lock file ... Permission denied
$ sudo !!
sudo apt update
...

只需输入 sudo !!,它就会作为 sudo apt update 重新执行。这个节省时间的效果是巨大的。


3. 文件选择达人“通配功能(Globbing)”

Globbing 是指使用 * 等通配符一次性指定多个文件的功能。在 Zsh 中,这项功能得到了极大的增强,被称为“扩展通配”。(要使用它,需要设置 setopt EXTENDED_GLOB。如果您在使用 Oh My Zsh,多半已默认启用)。

递归文件搜索 (**)

使用 **,您可以一键搜索到深层子目录中的文件。

# 列出所有子目录内的 .js 文件
ls -l **/*.js

OR 搜索 (|)

使用 |,您可以按“A 或 B”的条件来指定文件。

# 列出 .jpg 或 .png 文件
ls *.(jpg|png)

NOT 搜索 (^)

使用 ^,您可以指定“除……之外的文件”。

# 列出除 .log 文件外的所有文件
ls ^*.log

指定数值范围 (<->)

在处理带序号的文件时,这个功能对于指定特定范围的文件非常方便。

# 列出从 image1.jpg 到 image10.jpg 的文件
ls image<1-10>.jpg

总结

这次,我们介绍了一些 Zsh 被称为“最强 Shell”的、其标准配置中就包含的便捷功能。

这些功能,虽然每一个看起来都只是小小的改进,但在日常工作中日积月累,将极大地提升您的生产力。Zsh 不仅仅是一个执行命令的工具,更像是一个能主动为您提供支持的“伙伴”。

好了,对于那些开始认真考虑从 Bash 迁移到 Zsh 的朋友,下一篇文章我们将集中解说在 Zsh 中运行 Bash 脚本时的兼容性注意事项,以及让迁移过程更顺畅的核对清单。

Bash 切换 Zsh 用户兼容性核对清单