为什么我用zsh代替csh?

总结

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
会自动列出subcommand

$ dconf 
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 /按下就会自动输出org/system两个选项

$ dconf read /
org/     system/

再比如输入kill vim后按下tab, 如果只有一个匹配项,会自动变成kill 5378,多个会如下:
图片.png

历史记录

zsh的历史记录在多个terminal是共享,可以用向上箭头来搜索,比如输入make然后用向上键,它会依次列出以往以make开关的命令,这在实现工作中非常高效。

oh-my-zsh

150kStar、275+插件、140+主题、2000+贡献者....., 从这组数字就知道这是多么优秀的一个shell配套工具。

oh-my-zsh的存在极大简化了zsh配置和使用的问题,相当于精装房直接入住。

各种主题只要在配置文件里写一下就成功了, 各种插件只要在配置文件里加上就安装成功了

这个我们不多讲了,有兴趣可以直接使用就好了。

附加插件

https://github.com/zsh-users下有一些增强插件,都很命令,尤其推荐其中的zsh-autosuggestions, 它可以自动列出你以前输入过的命令和选项
比如用上面的dconf命令为例
图片.png

文件类型敏感的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执行

你可能感兴趣的:(shellzsh)