为什么说 zsh 是 shell 中的极品？
看好多人说fish比zsh好，其实fish是拆箱即用，而zsh定制性强。所以fish给人第一印象就会很好，有很多炫酷的特性。 当我还在纠结 这个选择时，我曾在知乎提过一个问题： zsh支持递归 fish好比ubuntu、linux mint，zsh好比arch linux、gentoo。 如果用默认配置，那么zsh也没比bash强大到哪里去，而fish的默认配置以及很炫酷了。 zsh默认是emacs mode，支持vi mode，切换命令是 linux给你开放了强大的api，但你不可能每需要使用一个功能都需要写代码去实现吧？直接用别人写好的二进制程序就行啦！zsh是不是也应该一样，直接使用现成的、别人写好的配置文件呢？对于linux的二进制程序，开发者往往会将其打包成软件包再分享出去，zsh的使用者，也会把自己的配置文件，打包成plugin分享出来。如果把zsh比作arch linux，那么就可以把zsh的plugin比作一个个的linux软件包，github的awesome系列，有一个awesome zsh plugin： 由于这些plugin太松散，需要有一些工具来进行管理，好比arch linux的pacman、python的pip、nodejs的npm、debian的apt-get。zsh官方并没有提供这类型工具，于是出现了很多第三方管理工具，详细列表可以参考上面的链接。其中一个比较热门的管理工具，oh my zsh和prezto： oh my zsh把不同类型的配置文件，划分成一个个的plugin（这个plugin指的是oh my zsh的plugin，而不是上面所说的zsh的plugin）， 比如说git plugin： Android用户的adb plugin： python的pip plugin： 双击esc执行 fuck 的thefuck plugin： 双击esc自动前置sudo的sudo plugin： 根据子字符串搜索历史记录的 history-substring-search： arch用户的plugin： 如果你喜欢fish的语法高亮，可以使用这个plugin： 如果你喜欢fish的自动建议，可以使用这个plugin： 默认的插件配置文件在~/.zshrc，你可以在配置文件中的plugins添加插件，官方插件列表在 ，非oh my zsh的官方插件可以用其它方式添加 有些同学用oh my zsh会觉得很慢，我长期用ssd感觉还好。 除了oh my zsh外，zsh还有另一款plugin管理工具叫prezto： 你可以按照你的需要和使用习惯来选择plugin，也可以修改现有的plugin，还可以自己定义一个plugin。无论是zsh的plugin，还是oh my zsh的plugin，大部分都是直接调用linux提供的命令和zsh提供的一些命令来实现一些操作。 比如说你输入 然后你只需要简单地输入 即可以查询自己的ip地址和所在地区了。 这时你想查询8.8.8.8这个ip地址的归属地，那么就输入 你就能查到这个ip来自美国Google。 我再输入 我可以查得到这个域名对应的ip是54.223.189.245，来自北京市 Amazon。 再举个例子，你可以在~/.zshrc的最后加上 重启zsh，然后你cd到一个地方，比如说cd /usr/local/bin后，你就可以按Ctrl+Q，跳回上一次所在的目录，并且用ls -lrth显示跳转后的目录下，最近修改的文件。 其实用什么shell都好，本质上是没有太大区别的，关键在于你怎么配置。