zsh是*nix用户比较少用的一个shell环境,原因除了因为它出生较晚,另一个重要原因就是大多数linux发行版,默认shell环境都是bash。
用的少并不代表不好用,zsh在用户交互提性上是远远好于bash/csh之类的。
易用性:zsh > bash > csh and others
bash是大多数linux发行版的默认shell环境,是最通用、最流行的shell
大多数用过bash的同学肯定有同感,bash的自动提示功能太弱了,即使有了bash-completion,补全功能也很有限,下面我总结了一下zsh优于bash的一些特点:
zsh特性繁多,在此我只简单介绍一两个我熟悉并且经常使用的特性
cd /d/w/t/0 # 相当于下面这行 cd /data/work/test/01
同一路径的子目录
cd /usr/local/bin && cd bin share # 相当于下面这行 cd /usr/local/bin && cd ../share
同一路径的中间子目录替换
cd /data/www/site1/apps/common/logic/test && cd site1 site2 #相当于 cd /data/www/site1/apps/common/logic/test && cd ../../../../site2/apps/common/logic/test
相比bash中的Ctrl-R,这个插件很好用
启用: 在~/.zshrc中添加: plugins=(history-substring-searc h) zsh-history-substring-search
zsh命令提示有很好的接口支持,很容易定制,并且自带了对版本控制工具的信息接口,比如可以当前git 库的分支、当前分支所处的git status信息,都可以获得
这里引用一下oh-my-zsh的一些主题
在oh-my-zsh github wiki中罗列了社区贡献的主题:
zsh 提供了一个很好用的功能,路径别名
这样针对很长的路径,就不用cd + Tab 来回切了
#define: hash -d dir_name="dir_path" #usage: cd ~dir_name or ~dir_name hash -d myweb="/data/www/mywebsite" # cd ~myweb 或者 ~myweb 或者直接myweb 就相当于 # cd /data/www/mywebsite #查看已有的路径别名 hash -d -L
普通的别名和bash的没有区别
alias gpl="git pull"
alias -s zip="unzip" # 这样只要输入 filename.zip 就自动unzip了 #类似的,还有下面这种 alias -s gz="tar -xzvf" alias -s tgz="tar -xzvf" alias -s bz2="tar -xjvf"
alias -L #显示所有的alias alias -g #显示全局的alias alias -s #显示后缀alias-针对文件名的alias
zsh在开源社区,有个很著名的仓库: oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
或者:
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
oh-my-zsh 安装完成后,会有~/.zshrc ~/.oh-my-zsh 所有的插件、命令alias、主题等都在 ~/.oh-my-zsh
~/.oh-my-zsh :
主题就是shell 的prompt 提示,zsh比其他shell多出来一个右提示, 提示的可定制性也很强
主题、使用哪些插件、自定义插件,都可以在 oh-my-zsh 安装完之后带的~/.zshrc 里进行配置
有现成的轮子,就不必费劲自己再去创造,暂且用拿来主义来伪装自己吧。我自己维护了一份基于oh-my-zsh的配置:
cp -r dmxdotfiles ~/dotfiles cd ~/dotfiles ./deploy zsh
文件 | 内容及作用 |
---|---|
~/.zprofile | zsh环境启动入口文件 |
~/.zshrc | 不用解释了^^ |
~/.zsh_env.zsh | 环境变量放在这个文件内 |
~/.zsh_alias.zsh | 通用的alias |
~/.zsh_custom/ | 存放一写自定义的内容和oh-my-zsh插件 |
在我的配置下,zsh启动时依次会source:
我在~/.zshrc里手动source了~/.zsh_env.zsh 和 ~/.zsh_custom 下的一些文件
注意,除了~/.zshrc ~/.zprofile, 其他的都是我自定义的,非zsh标准文件