乐趣区

关于shell:为什么我用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 <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 nWave 后按下 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 执行

退出移动版