终极Shell——Zsh
[撰文/Kardinal]
子曾经曰过,zsh: The last shell you’ll ever need!
Z是最后一个字母,所以它是终极Shell。我曾经搜索到一个比较各种Shell的文章,Zsh交互性是A+级别的,远高于其它Shell。在编程方面,Zsh是A级的吧,也是最高的。只是不知道出于什么原因,Zsh被严重的低估了。
大多数的Linux用户比较偏爱Bash,因为大多数的发行版默认的就是它。平心而论,Bash确实比Csh之流的好用多了。不过Bash也有很多地方不尽人意,像自动补全的功能不够强大,定位较长路径不够方便等。
后来我使用Zsh。如果不调整一些必要的配置的话,Zsh甚至还不如Bash好用。这也是很多人尝试过并放弃过的原因。
Zsh配置文件试用 (内附讲解)
不熟悉Zsh的人,对Zsh最深刻的印象应该就是它的命令提示符了。它支持右侧对齐的提示符,并且可以配置成这个样子的:
不过我还是喜欢比较简单的样式。
Zsh的自动补全功能十分的强大,如图所示:
它可以自动补全命令、参数、文件名、进程、用户名、变量、权限符等。
Zsh还有一个贴心的功能:路径别名。假设有一个很长的路径,例如/home/lighttpd/html,可以把这个路径命名为 ~WWW。
Zsh可以使用Emacs风格的键绑定,习惯Bash键绑定的朋友无需重新适应。Zsh兼容大多数主流Shell,像Bash、Csh等。
错误校正
– directory — 是补全类型提示

补全类型提示变成了 — corrections –
比如说上面的例子,如果输入的是11或者s11,它一样会修正为X11
有一个前提,就是每次修正,只允许有一处字符错误
两个以上的错误,除非可以匹配其它的选项,否则就不能修正
12 就不能修正为X11 ,除非候选里有 X12、Y12、Z12……
当然可以把容错字数改大一些,不过太大了也没有意义了
随便输点什么,就可以匹配所有的,和没有一样
同时重定向到多个文件: command >file.1 >file.2
比如装系统的时候,可以用这个命令
| blkid >> /boot/grub/menu.lst >> /etc/fstab |
compctl -g ‘*.tar.gz *.gz*.tgz’ + -g ‘*(-/)’ tar zxvf
过滤候选项
tar zxvf [tab]
候选菜单中只出现扩展名为 .tar.gz .gz .tgz 的文件
不过这个功能比较复杂,容易引起混乱,通常需要脚本配合
| 代码: |
| compctl -g ‘*.tar.bz2 *.tar.gz *.bz2 *.gz *.jar *.rar *.tar *.tbz2 *.tgz *.zip *.Z’ + -g ‘*(-/)’ extractextract() { if [[ -z "$1" ]] ; then print -P “usage: \e[1;36mextract\e[1;0m < filename >" print -P " Extract the file specified based on the extension" elif [[ -f $1 ]] ; then case ${(L)1} in *.tar.bz2) tar -jxvf $1 ;; *.tar.gz) tar -zxvf $1 ;; *.bz2) bunzip2 $1 ;; *.gz) gunzip $1 ;; *.jar) unzip $1 ;; *.rar) unrar x $1 ;; *.tar) tar -xvf $1 ;; *.tbz2) tar -jxvf $1 ;; *.tgz) tar -zxvf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *) echo “Unable to extract ‘$1′ :: Unknown extension” esac else echo “File (’$1′) does not exist!” fi } |
考虑到使用的不多,配置又麻烦,我没有配置这个功能
不过我想肯定有人愿意在这上面花点时间
我一直都用zsh,但是用的很肤浅,受教了。
我一直想用,但是不知道如何将我现在的用户从bash变成zsh,我只会在新建用户时指定shell
貌似很复杂
菜鸟我还是用bash比较顺手
toy用的什么terminal呀,urxvt?一直想要有这种多window的效果.
@cabrio chsh 可以做到。
右侧对齐的提示符没有什么意思,
bash可以补全命令、参数、文件名、用户名
那个路径别名一直在bash下使用,输入~然后按tab。
1. chsh 可以更換 login shell.
2. /etc/DIR_COLORS 可以不用存在啊~ 參考 dircolors 去 export LS_COLORS 就好了。
3. 一個可以直接 dl 下來的 .zshrc 試用好像比較方便點。
4. zsh “好像” 跟 screen 衝突… Orz 我再調整看看~ 因為我非要 screen 不可。
原来答案就在下一篇,呵呵。原来看见这种平铺式的布局出现在mrxvt的todo list中,一直很期待,甚至都想contribute一下,好像现在都还没有release。
修改/etc/passwd文件就可以修改默认的SHELL了.
bash 的全能补全也是被低估了吧
@aqueura
@anton
谢谢,回去马上试试
to:10 雪梨
BASH也可以补全变量啊用户啊什么的,但是要按特殊的组合键,看过王垠那篇火星文的都知道
ZSH会自动根据上下文补全,所有可能出现的东西
bash_completion我也不是没有用过(用的时间挺长的应该说)
如果够好了,我为什么要用ZSH
仔细看看关于Zsh的讨论部分,常见的质疑都有回答:D
http://forum.ubuntu.org.cn/viewtopic.php?t=138936&postdays=0&postorder=asc&start=15
to:walkerxk
右侧对齐的提示符本身并不实用,它只是提供了一种可能。例如能将提示符配置成第一幅图中的下面那种
bash可以补全命令、参数、文件名、用户名,这个看过王垠那篇火星文的都知道,但是要按特殊的组合键
bash的路径别名还真不知道,以前用bash的时候搜遍大江南北也没找到这个功能:D
to:anton
配置文件整理后上传
Ubuntu论坛上的roylez兄同时使用zsh和screen,他提供了一个解决方案
http://forum.ubuntu.org.cn/viewtopic.php?t=138936&postdays=0&postorder=asc&start=15
谢谢 kardinal ,啧啧啧,这连结里附的影片 screen 跟 zsh 搭的真漂亮。
真想跟他要 screenrc 跟 .zshrc/.zprofile 来玩。
roylez 真是行~
zsh 能不能像 fish 一样实现彩色的命令行提示?
之前想换掉 bash,一直也听说 zsh 比较强大,可是实在要花些时间研究,所以就用 fish 去了。总的来说还是不错,我自己也没什么很高深的应用需求,fish 基本都没能满足了。但是有几个实在无法忍受的 bug,比如非 X 环境一登录就卡死……
不如来个比较bash,cshell,zshell的文章吧
to:k
应该是可以的,不过配置可能比较麻烦。google一下说不定能找到答案
其实颜色太多也不好,gentoo的emerge开始觉得挺不错,色彩比较丰富,就是有点晃眼……最近又用archlinux,觉得不用彩色显示更好,可以看自己想看的信息,而不是被强迫看作者认为重要并彩色标示出来的信息
fish运行起来感觉还是比较迟钝的,而zsh的速度感觉比bash还要快,哪怕是比较大的配置文件:D
to:itroad8
有比较各种shell的文章,但每个人关注的侧重点不一样。大的方面比较,结论在文章的开头给出了:
Zsh交互性是A+级别的,远高于其它Shell。在编程方面,Zsh是A级的吧,也是最高的。只是不知道出于什么原因,Zsh被严重的低估了。
to:anton
本文介绍的功能,基本上是每个人都需要的功能。无论怎么配置zsh,这些功能都是不可少的
至于其它功能,自己想办法吧:D
zsh的completion比bash的强大太多,bash+bash_completion我以前也用过很长时间
那个花里胡哨的提示符看久了有点儿腻,而且如果是screen+zsh的用户有些信息(比如时间)会和screen的提示栏重复
Criteria Nb sh ksh bash zsh csh tcsh
Configurability 1 - + ++ +++ + ++
Execution of commands 2 + + + ++ + ++
Completion 3 – + ++ +++ + ++
Line editing 4 - + ++ ++ - ++
Name substitution 5 + + ++ ++ + ++
History 6 – + ++ ++ + ++
Redirections and pipes 7 + + + ++ + +
Spelling correction 8 – – – + – +
Prompt settings 9 + + + ++ + ++
Job control 10 – + + + + +
Execution control 11 + + + + + +
Signal Handling 12 + + + + - -
来源:
http://www.hep.phy.cam.ac.uk/lhcb/LHCbSoftTraining/documents/ShellChoice.pdf
其实我是被zsh里更好的补全功能而吸引的!
bash 用起来已经够舒服了,换来换去反而不习惯。
to 4楼:很多东西都可以做到,但是其实不方便,因为窗变小了。
其实我挺怀念高中时玩FreeBSD里面的csh的……
纠正错别字 引用框下第一行“凭心而论”应作“平心而论” :D
@gsj987: 谢谢,已纠正。
bash 也有基于 context 的上下文补齐啊: M-/
请教一下,在 fish 里面,如果我输入“.pekwm”,再按向上箭头,fish 只会列出包含“.pekwm”的历史记录,比如“vim ~/.pekwm/mouse”,或“cd .pekwm”。在 zsh 里面要怎样配置才能实现这样的功能?
to:K
这个似乎得用搜索了
和bash差不多
按Ctrl-r输入关键字搜索,再按Ctrl-r向前搜索,backspace向后搜索
[...] 终极Shell——Zsh — LinuxTOY [...]
确实比 bash 舒服多了,目录补全的时候可以循环枚举,而且循环时可以输入 / 进入当前目录开始循环枚举下一层目录。
另外配置文件中要求 /etc/DIR_COLORS 存在,似乎是不必要的吧,直接 eval dircolors 的输出就可以了。
[ -f /etc/DIR_COLORS ] && eval $(dircolors -b /etc/DIR_COLORS)
改成
eval $(dircolors -b)
最简单的能满足要求的就是最好的。
弱问作者给的配置文件文件头和尾的一堆^@是什么?我都删掉鸟。。。其他很好用
@Rainux:很好很强大^_^ 收录到《旅行手册》里了
@najja:这里给出的配置文件不再维护,以《旅行手册》里的为准 ^_^