mac 装了 oh my zsh 后比用 bash 具体好在哪儿?

#0503更新 .zshrc文件找到了… _________________________________ 都说zsh好,但是装了oh my zsh 之后还是像平时一样地用,可能还有好多功能不知道所以没发掘出来。但用来配置zsh的theme的那个迷一般的.zshrc文件我是真真找不到诶(PS 花了一天各种百度,说到设置theme和plugin,都是止步于“在.zshrc文件修改Theme的参数”,可天呐,这个文件在哪儿啊,我只找到了一个很相似的template)
关注者
482
被浏览
42,001

24 个回答

可以转载,注明出处。

使用zsh的十大优点

有朋友留言说不完全兼容,查了一下,优点1改为如下,如果还有补充等我以后实践中在来完善。

优点1:

如果你的bash脚本开头是以!#/bin/bash的话,在zsh下还是完全兼容bash的,之前bash下的使用习惯可以完全兼容。


优点2:

更强大的tab补全,当你切换目录敲两下tab,他可以列出当前目录下面的所有目录,并且可以使用键盘上下左右键来选择要进入的目录。




优点3:

更智能的切换目录,比如你要进入一个很深的目录,like this /var/log/nginx/error/lastyear/may/first/monday, 用zsh可以这样输入cd /v/l/n/e/l/m/f/m,然后按tab即可补全整个路径。或者你实现知道当前目录名称,可以直接输入目录,即可进去目录。bash下cd - 可以切换到刚才进入的目录,在zsh下可以记录最近进去过的10个目录,只需要输入d,然后看到对应的0-9的目录,输入对应的数字,即可进入对应的目录(感谢 @JayXon 的提示)。或者直接输入cd -然他后TAB一下,你会发现有最近使用过的31个目录等候你选择。







优点4:

命令选项补齐,比如输入docker,然后按tab,即可显示出docker都有哪些命令选项。



优点5:

命令参数补齐,比如要kill一个进程,直接输入kill 进程名,会自动显示出进程的process id,

如果用ssh,则会输出最近用ssh 连接过的主机名,配合.zshrc还可以实现自定义ping命令自动补齐的命令参数。

zstyle ':completion:*:ping:*' hosts 192.168.1.{1,50,51,100,101} www.google.com



优点6:

大小写字母自动更正,比如我们要cat一下README.txt,直接输入cat readme.txt TAB,之后zsh就会把小写的readme改成大写的。这个功能很好用哦。



优点7:

有着丰富多彩的主题,如果你使用我的脚本安装oh-my-zsh的项目的话,在~/.oh-my-zsh/themes里会找到多达142个主题,看中哪个主题直接在~/.zshrc 里面更改:


1
ZSH_THEME="ys"

想要看其他的主题,可以看官网的这个地址:

External themes · robbyrussell/oh-my-zsh Wiki · GitHub

或者知乎上的这个讨论地址:

oh my zsh 哪些主题比较好看、有特点? - 编程

然后我用的是这个主题:



优点8:

更强大的alias命令,比如下面命令,当你在zsh环境下输入hello.py即可直接用vim打开文件编辑,一个tgz的文件即可自动解压缩。


alias -s py=vim
alias -s html=vim
alias -s tgz='tar zxvf'

优点9:

智能命令错误纠正,比如输入apt-gte install somefile,回车后,zsh会提示你是否纠正apt-gte 为apt-get?输入y,后即是正确命令执行。在配合一下zshrc的profile的sudo命令设置,按两下ESC,即可在命令的前面自动加上sudo。



##在命令前插入 sudo {{{
#定义功能
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
zle end-of-line #光标移动到行末
}
zle -N sudo-command-line
#定义快捷键为: [Esc] [Esc]
bindkey "\e\e" sudo-command-line
#}}}



优点10:

最最强大的优点是可以集成各种类型的插件,比如切换目录的可以继承autojump,想跳转到哪里,直接j 加目录名称,真的非常强大,非常便利,这个bash也可以使用。比如想要去nginx目录,可以直接输入j nginx,他会搜索使用率最高的nginx的路径,如果想要去/var/log/下的nginx呢,直接输入j v ng,效果如下:


在比如git插件,当你在一个git 仓库的时候你的zsh PS1是这样显示的,


会面会跟git 是master 还是 branch,然后的o 表示当前没有modify,也是最新的,比如我们更改一个文件,立马变成如下:


后面的o变成了x,代表你的本地仓库有更新。

在比如说你在你的仓库里新添加了几个文件,当你使用git add的时候多按几次TAB,你的新添加的文件就都补上了。


还有一个比较厉害的插件是history-substring-search, 强大到令人发指,首先你输入的每条命令他会给你记录下时间,并且在你的home目录创建.zsh_history/相对应的目录,并记录你在当前目录下用过的命令。

比如输入ansible,按上下箭头,即可搜索之前使用过的包括ansible的命令,而且是完全匹配,怎么说呢,就是比如说输入“ansi” 他就会匹配命令当中包含“ansi”的,如果输入“ansible all” 他就会匹配完全包含“ansible all”的命令,强大的地方在于当你输入ansible 上箭头比如找到这条命令ansible all -m shell -a 'update',你可以左右光标符到m,然后上下翻命令,这时候搜索的就是"ansible all -"。也可以用histall | grep ansible的方式:


zsh还有很多强大的plugin值得去研究一下,比如集成docker的,aws的,go,python等等。还有大部分不习惯centos7的systemctl命令的,有个systemd的插件值得一用。


# root at shanker in ~/.oh-my-zsh/plugins/systemd on git:master o [7:17:36]
# less systemd.plugin.zsh
user_commands=(
list-units is-active status show help list-unit-files
is-enabled list-jobs show-environment cat)
sudo_commands=(
start stop reload restart try-restart isolate kill
reset-failed enable disable reenable preset mask unmask
link load cancel set-environment unset-environment
edit)
for c in $user_commands; do; alias sc-$c="systemctl $c"; done
for c in $sudo_commands; do; alias sc-$c="sudo systemctl $c"; done
alias sc-enable-now="sc-enable --now"
alias sc-disable-now="sc-disable --now"
alias sc-mask-now="sc-mask --now"

如果大家觉得好用,可以用我写的自动化安装脚本,只支持centos like和ubuntu like系统哦。

shell/init_zsh.sh at master · sangrealest/shell · GitHub

或者参考这篇文章:

Oh-My-Zsh的自动安装和功能集成

github上面24000+的stars可不是白拿的。
zsh = zshellUnix体系中有几种shell,例如:bash, ksh, tcsh,这其中最为人们熟悉的是bash--大多数Unix操作系统的默认shell,而zsh是其中的一种。
zsh早期因为其灵活的配置性及一些功能被一些geek使用,但是由于配置略为繁琐,使用比例并不高。
oh-my-zsh作为一个开源及社区驱动的项目正是为了解决这个问题出现的。
对于我来说oh-my-zsh所提供的最棒的特性有:
  • 可配置性。180余种插件,基本上能满足大多数人的日常使用;
  • 自动升级。隔一段时间就能自动升级,保证插件和主题的更新;
  • 安装即好用。对我来说oh-my-zsh安装完之后的默认插件和主题就很够用了,有些时候不需要花时间来配置插件;
  • 主题。有120多种主题可供选择,不过我个人倒不太愿意话时间在上面,感觉默认主题robbyrussell就挺好。

————————————————————————————————————
如何配置zsh?
  • 配置文件
配置文件在用户的home文件夹根目录下,位置是:~/.zshrc,修改配置都在这个文件中进行。

  • 修改主题
  • 修改插件
  • bonus

进入文件夹
  • bash
cd folderName
  • zsh
folderName
更爽的用法,先装下homebrew Homebrew — OS X 不可或缺的套件管理器
brew install autojump
然后比如一个文件夹是
~/userName/project
zsh配置好autojump插件以后直接
j project
----------------------
待补充
oh-my-zsh : robbyrussell/oh-my-zsh · GitHub
zsh网站 :zsh.org/