总结
zsh拥有成熟的生态,现代的语法,强大的功能,是目前shell的最好选择。
我用shell做什么
我是shell的重度用户,开发工作除了写文档都是在shell下完成的。所以shell就是我的生产力工具,打造高效的shell环境,可以大幅提高我的工作效率。有很多功能,比如文件打开关闭,文件目录跳转,初始化配置,eda工具设置,是不适合用其他脚本语言来写的,shell脚本也是最佳选项。很多子功能适合编译成二进制文件后,由shell来统一调用支配。
所以选择shell非常关注它的生态以及生态里已有的功能。生态不好,就需要自己造轮子,显示不适合我这样的IC开发者,所以我最选淘汰的是我们行业最常用的csh. 其次就是最好有成套的环境可以直接使用,这样就不需要自己花大量时间去配置成方便使用的环境。这方面oh-my-zsh的存在极大减少了使用者的配置时间。拿来主义非常爽。内置非常多主题和插件,直接可以使用。
担忧
在我们这个行业非常多人用csh,并且可能有些脚本是用csh写的,觉得转过来非常不方便,相当于别人已经有csh生态了,你一个人转过来相当于抛弃了生态。
这在我看来完全不是问题,因为别人所谓的脚本如果是很严谨的脚本,一定不会依赖于SHELL的,如果依赖于SHELL,那么脚本一定是比较随意的,或者是source一些变量设定和路径设定的,这种如果一定想重用,可以用工具自动转成bash(这样zsh也可以用了)。这种是一次性工作量。
相比zsh带来的效率提升,这个代价很小。
小声说一句,我其实并没有用其他人的csh脚本,因为他们的脚本真的只是给自己用的一些变量设定和alias之类。我是用不上的。
下面我来一一介绍它的优点。
兼容性
zsh基本兼容bash, 所以绝大部分bash脚本可以直接使用。
细微的差别参见我的这篇文章
文件补全
只要按下tab键, 它可以根据前文命令列出文件或目录。
如果是svn add
, 它会只列出末添加到仓库中的文件。
如果是cd
, 它会只列出目录。
便捷的目录切换
可以用cd .....
向上5层
可以用d
回车列出最近5个目录,然后用数字选择进入哪个目录
可以用cd /v/o/s/d
来进入/var/opt/synopsys/doc
目录
命令选项补全
这是补全的一种,但它的强大值得再提一遍
它可以理念命令。比如dconf <Tab>
会自动列出subcommand
$ dconf <Tab>
compile -- compile a binary database from keyfiles
dump -- dump an entire subpath to stdout
help -- display help information
list -- list the contents of a directory
load -- populate a subpath from stdin
read -- read the value of a key
reset -- reset the value of a key or directory
update -- update the system databases
watch -- watch a path for changes
write -- change the value of a key
命令参数补全
比如上面的命令输完dconf read /
按下<Tab>就会自动输出org/
和system
两个选项
$ dconf read /
org/ system/
再比如输入kill vim
后按下tab, 如果只有一个匹配项,会自动变成kill 5378
,多个会如下:
历史记录
zsh的历史记录在多个terminal是共享,可以用向上箭头来搜索,比如输入make
然后用向上键,它会依次列出以往以make开关的命令,这在实现工作中非常高效。
oh-my-zsh
150kStar、275+插件、140+主题、2000+贡献者....., 从这组数字就知道这是多么优秀的一个shell配套工具。
oh-my-zsh的存在极大简化了zsh配置和使用的问题,相当于精装房直接入住。
各种主题只要在配置文件里写一下就成功了, 各种插件只要在配置文件里加上就安装成功了
这个我们不多讲了,有兴趣可以直接使用就好了。
附加插件
在https://github.com/zsh-users下有一些增强插件,都很命令,尤其推荐其中的zsh-autosuggestions
, 它可以自动列出你以前输入过的命令和选项
比如用上面的dconf
命令为例
文件类型敏感的alias
比如配制如下:
alias -s tgz='tar -zxvf'
alias -s gz='tar -zxvf'
alias -s bz2='tar -jxvf'
alias -s zip='unzip'
alias -s v=vi
alias -s sv=vi
alias -s vhdl=vi
alias -s cpp=vi
在zsh下输入test.sv会自动用vi打开,输入test.tgz,会用tar -zxvf test.tgz
执行
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。