学习 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 脚本时的兼容性注意事项,以及让迁移过程更顺畅的核对清单。