zsh与oh-my-zsh

在开始今天的 MacTalk 以前,先问两个问题吧:html

一、相对于其余系统,Mac 的主要优点是什么?
二、大家平时用哪一种 Shell?
……java

第一个童靴能够坐下了,Mac 的最大优点是 GUI 和命令行的完美结合,不要把全部注意力放在 Mac 性感的腰身和明媚的显示屏上好吧,这不是妹纸!第二个童靴你能够出去面壁了,讲了这么多期 MacTalk 你告诉我还在用 Windows 的 cmd, 你让 Mac 君情何以堪?哪怕你就说在用 Linux 的 Bash 我也就原谅你了,踢飞!python

上次在「如何学习一门编程语言」里提到了 Shell,也有读者问到 Shell 的问题,因此此次给你们说说 Shell 的事。git

我在「趣谈我的建站」里介绍过一点 Shell,本身的东西借用下不丢人,把扯淡的拿掉,干货留下,就是以下内容:程序员

Shell是Linux/Unix的一个外壳,你理解成衣服也行。它负责外界与Linux内核的交互,接收用户或其余应用程序的命令,而后把这些命令转化成内核能理解的语言,传给内核,内核是真正干活的,干完以后再把结果返回用户或应用程序。github

Linux/Unix提供了不少种Shell,为毛要这么多Shell?难道用来炒着吃么?那我问你,你同类型的衣服怎么有那么多件?花色,质地还不同。写程序比买衣服复杂多了,并且程序员每每负责把复杂的事情搞简单,简单的事情搞复杂。牛程序员看到不爽的Shell,就会本身从新写一套,慢慢造成了一些标准,经常使用的Shell有这么几种,sh、bash、csh等,想知道你的系统有几种shell,能够经过如下命令查看:shell

cat /etc/shells

显示以下:编程

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

在 Linux 里执行这个命令和 Mac 略有不一样,你会发现 Mac 多了一个 zsh,也就是说 OS X 系统预装了个 zsh,这是个神马 Shell 呢?vim

目前经常使用的 Linux 系统和 OS X 系统的默认 Shell 都是 bash,可是真正强大的 Shell 是深藏不露的 zsh, 这货绝对是马车中的跑车,跑车中的飞行车,史称『终极 Shell』,可是因为配置过于复杂,因此初期无人问津,不少人跑过来看看 zsh 的配置指南,什么都不说转身就走了。直到有一天,国外有个穷极无聊的程序员开发出了一个可以让你快速上手的zsh项目,叫作「oh my zsh」,Github 网址是:。这玩意就像「X天叫你学会 C++」系列,可让你神功速成,并且是真的。ruby

好,下面咱们看看如何安装、配置和使用 zsh。

安装zsh

若是你用 Mac,就能够直接看下一节
若是你用 Redhat Linux,执行:sudo yum install zsh
若是你用 Ubuntu Linux,执行:sudo apt-get install zsh
若是你用 Windows……去洗洗睡吧。

安装完成后设置当前用户使用 zsh:chsh -s /bin/zsh,根据提示输入当前用户的密码就能够了。

安装oh my zsh

首先安装 git,安装方式同上,把 zsh 换成 git 便可。

安装「oh my zsh」能够自动安装也能够手动安装。

自动安装:

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

手动安装:

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

都不复杂,安装完成以后退出当前会话从新打开一个终端窗口,你就能够见到这个彩色的提示了:


配置

zsh 的配置主要集中在用户当前目录的.zshrc里,用 vim 或你喜欢的其余编辑器打开.zshrc,在最下面会发现这么一行字:

# Customize to your needs…

能够在此处定义本身的环境变量和别名,固然,oh my zsh 在安装时已经自动读取当前的环境变量并进行了设置,你能够继续追加其余环境变量。

接下来进行别名的设置,我本身的部分配置以下:

alias cls='clear'
alias ll='ls -l'
alias la='ls -a'
alias vi='vim'
alias javac="javac -J-Dfile.encoding=utf8"
alias grep="grep --color=auto"
alias -s html=mate   # 在命令行直接输入后缀为 html 的文件名,会在 TextMate 中打开
alias -s rb=mate     # 在命令行直接输入 ruby 文件,会在 TextMate 中打开
alias -s py=vi       # 在命令行直接输入 python 文件,会用 vim 中打开,如下相似
alias -s js=vi
alias -s c=vi
alias -s java=vi
alias -s txt=vi
alias -s gz='tar -xzvf'
alias -s tgz='tar -xzvf'
alias -s zip='unzip'
alias -s bz2='tar -xjvf'

zsh 的牛粪之处在于不只能够设置通用别名,还能针对文件类型设置对应的打开程序,好比:

alias -s html=mate,意思就是你在命令行输入 hello.html,zsh会为你自动打开 TextMat 并读取 hello.html; alias -s gz='tar -xzvf',表示自动解压后缀为 gz 的压缩包。

总之,只有想不到,木有作不到。

设置完环境变量和别名以后,基本上就能够用了,若是你是个主题控,还能够玩玩 zsh 的主题。在 .zshrc 里找到ZSH_THEME,就能够设置主题了,默认主题是:

ZSH_THEME=”robbyrussell”

oh my zsh 提供了数十种主题,相关文件在~/.oh-my-zsh/themes目录下,你能够随意选择,也能够编辑主题知足本身的变态需求,我采用了默认主题robbyrussell,不过作了一点小小的改动:

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,c 表示当前目录,d 表示绝对路径,另外在末尾增长了一个「 > 」,改完以后的效果是这样的:

你们能够尝试进行改造,也算个趣事。

最后咱们来讲说插件。

插件

oh my zsh 项目提供了完善的插件体系,相关的文件在~/.oh-my-zsh/plugins目录下,默认提供了100多种,你们能够根据本身的实际学习和工做环境采用,想了解每一个插件的功能,只要打开相关目录下的 zsh 文件看一下就知道了。插件也是在.zshrc里配置,找到plugins关键字,你就能够加载本身的插件了,系统默认加载 git ,你能够在后面追加内容,以下:

plugins=(git textmate ruby autojump osx mvn gradle)

下面简单介绍几个:

一、git:当你处于一个 git 受控的目录下时,Shell 会明确显示 「git」和 branch,如上图所示,另外对 git 不少命令进行了简化,例如 gco=’git checkout’、gd=’git diff’、gst=’git status’、g=’git’等等,熟练使用能够大大减小 git 的命令长度,命令内容能够参考~/.oh-my-zsh/plugins/git/git.plugin.zsh

二、textmate:mr能够建立 ruby 的框架项目,tm finename 能够用 textmate 打开指定文件。

三、osx:tab 加强,quick-look filename 能够直接预览文件,man-preview grep 能够生成 grep手册 的pdf 版本等。

四、autojump:zsh 和 autojump 的组合造成了 zsh 下最强悍的插件,今天咱们主要说说这货。

首先安装autojump,若是你用 Mac,可使用 brew 安装:

brew install autojump

若是是 Linux,去下载 autojump 的最新版本,好比:

wget https://github.com/downloads/joelthelion/autojump/autojump_v21.1.2.tar.gz

解压缩后进入目录,执行

./install.sh

最后把如下代码加入.zshrc:

[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

至此,安装、配置、插件三位一体,终极 Shell 全面登场。退出终端会话从新登陆,开始感觉 zsh 的训疾如风!

使用 zsh

一、兼容 bash,原来使用 bash 的兄弟切换过来毫无压力,该咋用咋用。

二、强大的历史纪录功能,输入 grep 而后用上下箭头能够翻阅你执行的全部 grep 命令。

三、智能拼写纠正,输入gtep mactalk * -R,系统会提示:zsh: correct ‘gtep’ to ‘grep’ [nyae]? 比妹纸贴心吧,她们向来都是让你猜的……

四、各类补全:路径补全、命令补全,命令参数补全,插件内容补全等等。触发补全只须要按一下或两下 tab 键,补全项可使用 ctrl+n/p/f/b上下左右切换。好比你想杀掉 java 的进程,只须要输入 kill java + tab键,若是只有一个 java 进程,zsh 会自动替换为进程的 pid,若是有多个则会出现选择项供你选择。ssh + 空格 + 两个tab键,zsh会列出全部访问过的主机和用户名进行补全

五、智能跳转,安装了autojump以后,zsh 会自动记录你访问过的目录,经过 j + 目录名 能够直接进行目录跳转,并且目录名支持模糊匹配和自动补全,例如你访问过hadoop-1.0.0目录,输入j hado 便可正确跳转。j –stat 能够看你的历史路径库。

六、目录浏览和跳转:输入 d,便可列出你在这个会话里访问的目录列表,输入列表前的序号,便可直接跳转。

七、在当前目录下输入 .. 或 … ,或直接输入当前目录名均可以跳转,你甚至再也不须要输入 cd 命令了。

八、通配符搜索:ls -l **/*.sh,能够递归显示当前目录下的 shell 文件,文件少时能够代替 find,文件太多就歇菜了。

九、更强的别名:请参考配置一节。

十、插件支持:请参考插件一节。

……

看完这篇文章,你就知道,zsh一出,无人再与争锋!终极二字不是盖的。

若是你是个正在使用 shell程序员,若是你依然准备使用 bash,那就去面壁和忏悔吧,别说你订阅过 MacTalk!

感谢那位开发了 oh my zsh 的无聊程序员,他可能没有所以收获物质上的利益,可是他的代码提高了无数程序员的效率,节省了大量的时间,咱们说,程序员改变世界!

MacTalk 写的多了,朋友和家人都不太理解,这玩意赚不了钱争不了名,写来何用?我想,可以学习、编码、写做,并作出一点帮助别人的东西,总好过炒股炒房的价值吧……

 

 

 

 

Mac下默认的终端使用的是bash,有没有更好的? 是zsh.

安装zsh

brew install zsh

设置zsh为默认shell

mate /etc/shells

在文末增长:

/usr/local/bin/zsh

将zsh设置为默认的Shell:

chsh -s /usr/local/bin/zsh

从新打动iterm2。

配置zsh

目前流行的安装配置文件有2个.一个是官网的grml-zsh-config;另外一个是oh-my-zsh.

Rails开发者通常推荐后者.安装方式以下:

cd ~/.  #进入根目录
#自动安装脚本    
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

而后修改.zshrc,将原来.bash_profile与.profile中的自定义内容导入过来. 好比支持rvm,应在.zshrc增长:

[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm

并自定义.zhsrc文件, 好比更换theme.完整的theme方案列表在这里

export ZSH_THEME="robbyrussell"

整合rails3开发经常使用插件

安装git,rails,ruby,rvm等rails开发经常使用的插件.请注意,oh-my-zsh的plugins目录下面有rails与rails3两个,若是但愿支持rails3,是:

plugins=(rails3 rails git textmate ruby rvm gem git github brew bundler textmate pow)

这些插件的用法参考oh-my-zsh的wiki

如需查看已经安装或者安装plugins,在这里:

cd ~/.oh-my-zsh/plugins

修改完以后,从新加载:

source ~/.zshrc

更多参考

oh-my-zsh
grmlzshrc
zsh – 给你的Mac不一样体验的Terminal!

相关文章
相关标签/搜索