Mac OSX下安装和使用oh-my-zsh

作为代码狗,每天要在命令行上浪费N多绳命。当你为Mac上难用的bash咬牙切齿的时候,殊不知OSX已自带了另一种好用得不得了的shell:zsh。但是由于配置过于复杂,如果想爽快地使用的话,有必要安装oh-my-shell,真的十分好用。本文就将介绍oh-my-zsh的安装使用以及一些技巧。

安装zsh

通过指令查看你的系统支持哪几种shell。运行cat /etc/shells,Mac系统显示如下:

1
2
3
4
5
6
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

如上所示,如果是Mac系统,无需再重新安装zsh。
如果是Redhat Linux,执行sudo yum install zsh
如果是Ubuntu Linux,执行sudo apt-get install zsh
安装完成后,将当前用户使用的shell切换成zsh: chsh -s /bin/zsh,请不要担心bash的命令无法使用,因为zsh是完全兼容bash的。

如果你在 .bashrc 或者 .bash_profile 中设置了PATH或者自定义了一些alias等,需要将这些配置配置到.zshrc中,并执行一下source ~/.zshrc,这样原先的使用都不受影响。

安装oh-my-zsh

自动安装:

1
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

手动安装:

1
2
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

配置

zsh的配置主要集中在用户目录下的.zshrc,可以在该文件中对环境变量以及别名进行设置。我的常用配置如下:

1
2
3
4
5
6
7
alias subl=\''/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl'\'
alias -s markdown=subl
alias -s md=subl#在命令行直接输入后缀为md的文件名,会在sublime text中打开
alias -s log=vim
alias -s txt=vim
alias -s gz='tar -xzvf'
alias -s tgz='tar -xzvf'

zsh 既可以设置通用别名,还能针对文件类型设置对应的打开程序,比如:
alias -s md=subl,意思就是你在命令行输入 hello.md,zsh会为你自动打开 sublime text 并读取 hello.md; alias -s gz=’tar -xzvf’,表示自动解压后缀为 gz 的压缩包。

zsh拥有很多强大的功能,可以去.zshrc中看那些配置的具体说明,很多默认是被注释掉的,去掉注释即可打开相关特性。现在通过几行配置打开zsh强大的补全与纠错功能。

1
2
3
4
5
6
7
8
9
10
# completion
autoload -U compinit
compinit

# correction
setopt correctall

# prompt
autoload -U promptinit
promptinit

补全功能使得你只需要输入开头或者其中的几个字母,通过tab键就可以自动补全正确的目录活着文件名。纠错功能使得你输入gti时会提示是否换成git

注意:vim的补全时可能会报错_arguments:450: _vim_files: function definition file not found,此时只需要删掉 ~/.zcompdump,关闭shell窗口,重新进入即可。

另外,可以在.zshrc中通过设置ZSH_THEME=”robbyrussell”来改变主题,~/.oh-my-zsh/themes/目录下有很多主题。我使用的是默认的主题,只不过做了一点小改动:

1
2
PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}$'
#PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'

将c改成了d,表示绝对路径,在末尾加上了一个$。

插件

oh-my-zsh自带了很多好用的插件,位于~/.oh-my-zsh/plugins/目录下,开启时只需在.zshrc中找到plugins=(git),将想加的插件的名字添加进去即可。比如plugins=(git z)就开启了git和z两个插件。下面列出几个常用的自带插件。

z

这是个自带的但是没有开启的插件,类似于autojump。比如经常进入~/Documents目录,按下 z doc 一般它就可以跳进去了(当然首先你得用一段时间让它积累一下数据才能用)。

d

按一下 d 再回车你会看到最近的历史记录,可以通过数字比如 1, 2 之类的返回到某个历史记录中了。

zsh_stats

zsh_stats 可以看到你的使用频率前 20 的命令。

Git Aliases

git 插件是默认开启的,它能够自动补全以及显示所在 branch。下面列出常用的git命令别名。

Alias Command
g git
gst git status
ga git add
gp git push
gl git pull
gc git commit -v

更多自带的插件用法请参见Plugins Overview

小技巧

  • 在当前目录下输入 .. 或 … ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd 命令。
  • 通配符搜索:ls -l */.sh,可以递归显示当前目录下的 shell 文件,文件少时可以代替 find。