为什么说 zsh 是 shell 中的极品? - 知乎用户的回答 - 知乎

6,291 阅读2分钟
原文链接: www.zhihu.com

它相对与 bash,tcsh 等有什么优势呢?如果优势很突出的话可以直接只学 zsh 吗?

补全

zsh 的命令补全功能非常强大,可以补齐路径,补齐命令,补齐参数等。(请问你记住 tar 的所有参数了吗 ,只要 tar -加 tab 键,再也不用 rtfm 了 )


按下 tab 键显示出所有待选项后,再按一次 tab 键,即进入选择模式,进入选择模式后,按 tab 切向下一个选项,按 shift+tab 键切向上一个选项,ctrl+f/b/n/p 可以向前后左右切换。



kill

以前杀进程是ps aux | grep xxx查进程的 PID,然后kill PID。有了 zsh,直接kill xxx然后按下 tab 键即可~


kill emacs
# 按下 tab,变成:
kill 59683

zsh 不仅支持普通 alias,还支持针对文件类型的 alias。我配置的文件类型 alias 如下:


alias -s gz='tar -xzvf'
alias -s tgz='tar -xzvf'
alias -s zip='unzip'
alias -s bz2='tar -xjvf'
alias -s php=vi
alias -s py=vi
alias -s rb=vi
alias -s html=vi
alias gcid="git log | head -1 | awk '{print substr(\$2,1,7)}' | pbcopy"

配置完毕之后,在 zsh 下直接输入xxx.rb,将自动用 vi 打开,直接输入xxx.tgz,将直接按照tar -xzvf解压。最后一个gcid将当前 git 项目的第一个 commit 的 id 复制到系统剪切板(pbcopy是 Mac 下的复制到系统剪切板命令,linux 请参考相应的发行版更改),在执行 rebase 的时候特别方便。

zsh 的目录跳转更为智能,你无需输入cd,直接输入路径即可。..表示后退一级目录,../../表示后退两级,依次类推。(...的作用和../../相同)

输入d,将列出当前 session 访问过的所有目录,再按提示的数字即可进入相应目录。


~
> d
0	~
1	~/Applications
2	~/.proxychains
3	/opt/homebrew-cask/Caskroom

~
> 1
~/Applications

历史记录

zsh 的历史记录跨 session,可以共享。历史记录支持受限查找。比如,输入git,再按向上箭头,会搜索用过的所有 git 命令。

通配符搜索

ls *.png查找当前目录下所有 png 文件,ls **/*.png递归查找。

更多请见 一些命令行效率工具


iterm2 介绍: iterm2有什么酷功能? - 知乎用户的回答