iTimothy

程序员内功系列--iTerm与Zsh篇

俗话说“工欲善其事,必先利其器”,作为一个长期在命令行下面工作的人,Mac那个自带的Terminal功能太弱了一些,长此用下去,必定是不能忍的。于是,终于轮到此篇的主角上场了:iTerm2 和 Zsh, 这次,我们来一场iTerm2和Zsh的体验之旅……

关于iTerm2

iTerm2是一款完全免费的,专为 Mac OS 用户打造的命令行应用,当然,也是程序员们的最爱。iTerm2本身支持很多自定义化的设置,比如自定义配色,自定义快捷键,方便的水平和垂直分屏功能,等等…… 毫不避讳的讲,说它是如今Mac下最好的终端工具也不为过。当然,日常工作与开发中,用它替代Mac自带的Terminal也是不二的选择。

关于 Zsh 与 Oh My Zsh

有了终端利器iTerm2,当然还得配上一款顺手的shell。众所周知,如今用得最广泛的默认shell,就是bash了,因为它也是很多Linux发行版默认带的shell。作为默认自带的shell,其特点,也就是:特点不是很明显 -_-# 不太方便的地方是:可定制性和可扩展性有限,自动补全功能不够强大…… 所以,既然用上了iTerm2,需要一款更为强大的shell来配合。

关于shell,首当推荐的就是Zsh了。之所以叫Zsh,其含义是:

The last shell you’ll ever need!

可以理解为,一旦用上它,就别无所求了。跟Bash相比,Zsh的补全功能强大了许多,可以自动补全命令、参数、文件名、进程、用户名、变量、权限符,等等…… 另外,还支持插件,通过插件又可以扩展出许多功能来。

既然有了Zsh,那Oh My Zsh又是啥呢?因为 zsh 的默认配置极其复杂繁琐,让人望而却步,直到有了Oh My Zsh这个开源项目,让zsh配置降到0门槛。而且它完全兼容 bash 。所以,我们可以理解为Oh My Zsh是一个方便你配置和使用Zsh的一个开源工具。

掌握了这些姿势,随后我们可以开始动手配置我们逼格满满的终端环境了……

iTerm2 安装与配置

安装iTerm2比较简单,直接从官网下载安装即可。安装好之后,我们还需要进行一系列的设置才行。

主题配置

iTerm2支持许多的主题配色,可以自己定义,也可以参考网上现成的主题配色。我个人比较喜欢Solarized配色,因为可以配合Vim里面的Solarized主题。

下面是一些常用的主题配色的预设置文件:

这些配色预设置文件,可以直接导入到iTerm2中,然后可以直接在设置中选择:

安装Powerline字体

为了终端下能正确的显示fancy字符,需要安装powerline字体,这样,这些fancy字符不至于显示为乱码。
GitHub上已经有制作好的Powerline字体,可以下载了直接安装到系统:

Powerline字体下载: https://github.com/powerline/fonts

安装好之后,就可以选择一款你喜欢的Powerline字体了:Preferences -> Profiles -> Text -> Font -> Change Font

iTerm2其他设置

一切配置妥当,不过好像还差点什么,好像目录名字的显示不够显眼。

可以试试 Preferences -> Profiles -> Text -> Text Rendering 把 Draw bold text in bright colors 前面的勾去掉:

嗯,这下文件和目录可以很容易区分了……

Zsh 与 OhMyZsh 安装与配置

如果你是用的Mac OS,默认应该自带了zsh了,安装之前可以确认一下:

1
2
3
4
5
6
7
8
9
10
11
12
cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

有/bin/zsh表明已经预装zsh了,没有的话,可以通过命令 brew install zsh 来安装。接下来,我们需要安装的是OhMyZsh,OhMyZsh的安装也比较简单,官网有一键安装脚本。默认安装过后,使用的是robbyrussell主题,你可以在这里找到各种主题。我现在使用的主题是一款修改过的定制主题,叫做:lambda-mod 放在我的GitHub项目mydotfiles上。

找到一款你喜欢的主题,把主题文件下载到 ~/.oh-my-zsh/themes 里面,然后修改 ~/.zshrc 文件,配置好主题名字即可:

1
ZSH_THEME="lambda-mod"

待配置妥当,看起来应该是这样的:

Zsh常用设置

跟Bash一样,Bash的配置文件叫做.bashrc,Zsh的配置文件,也放在用户当前目录,叫做.zshrc。
我把我自定义的.zshrc放到了GitHub上,权当抛砖引玉,供大家参考。

接下来我们可以体验一下zsh的各种黑科技了……

来自Zsh的黑科技

路径别名

需要在配置文件(通常是 .zshrc)中先定义好规则,形如:

hash -d sortcut_name=path
配置应用后,直接使用 ~ sortcut_name (甚至直接输 sortcut_name 回车就行了)就可以跳转到相应目录

命令别名

通过在.zshrc中配置alias,可以方便的为其他的命令设置别名,这是个很不错的功能。因为我懒,平时甚至连敲命令也想偷懒,于是,我设置了很多alias。(参考我的.zshrc配置文件)

比如跟git相关的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
alias gs="git status"
alias gsm="git summary"
alias ga='git add'
alias gd='git diff'
alias gf='git fetch'
alias grv='git remote -v'
alias grb='git rebase'
alias gbr='git branch'
alias gpl="git pull"
alias gps="git push"
alias gco="git checkout"
alias gl="git log"
alias gc="git commit -m"
alias gm="git merge"

比如,要push提交到远程git仓库的时候,就不必老老实实的输入 git push origin master 了,只需要输入 gps origin master 即可。于是 git pull 也简化成了 gpl , git commit -m 也简化成了 gc

嗯,只要你够懒,相信你一定还能发明出许许多多的alias来…… -_-#

切换目录

在Zsh中,可以通过输入 . 号来跳转,比如:

  • 直接输入.. 和 … 可以快速切换到上层和上上层目录
  • 直接输入n+1个点,可以往上层跳转 n 层

进程id补全

Zsh的补全功能非常不错,除了一般的目录和文件名补全,还可以自动补全进程ID。比如,我们通常要kill掉一个进程,得先用 ps -aux|grep process_name 先拿到进程id,然后再 kill pid 来终止掉一个进程。在Zsh中可以直接这样:

快速跳转

Zsh支持目录的快速跳转,我们可以使用 d 这个命令,列出最近访问过的各个目录,然后选择目录前面的数字进行快速跳转:

是不是很方便呢?

目录名简写与补全

如果确切的知道我们要进入某一层目录,但是目录名比较长,没关系,Zsh帮你搞定!
比如我们要进入到 ~/workspace/src/dict,我们只需要输入每个目录的首字母就行,然后再TAB键补全,Zsh会帮你搞定剩下的:

常用命令参数补全

Zsh在行的,不光是目录名的补全,嗯,常用的命令参数,它也能给你提供参考:

重复上一条命令

输入 r ,可以很便捷的重复执行上一条命令。

Zsh 常用插件推荐

Zsh支持插件,通过插件扩展可以实现许多方便的功能。这里介绍一下我常用的几个Zsh插件(参考我的.zshrc配置文件)

autojump

autojump也是一个目录直接快速跳转的效率工具,它会自动记录之前访问过的目录,并计算权重。用法也很简单 j directory_name 即可。比如我要访问 ~/workspace/src ,只需要输入 j src 就行了……

sublime

可以方便的在Zsh终端中调用Sublime Text打开文件,比如输入 st README.md 就可以调用机器上安装的Sublime Text打开当前目录的README.md文件进行编辑操作。

一个方便的终端搜索工具,支持大多常用的搜索引擎,比如:

  • 输入 baidu hhkb pro2 直接在浏览器打开百度搜索关键字”hhkb pro2”
  • 输入 google minila air 直接在浏览器打开Google搜索关键字”minila air”

通过查看这个插件的代码,可以看到支持的搜索引擎,包括baidu, google, bing, yahoo 等等…… 当然,还有广大程序化最爱的GitHub哦!

zsh-autosuggestions

命令自动提示插件,这个是个很有意思也很高效的插件。能记录平时你输入过的命令,下次再输入的时候,它会提前提示你,方便懒人。如果是你需要的命令,直接 Ctrl+F 搞定,来直接看看效果吧:

需要安装两个插件:

配置参考 这里

extract

一个功能强大的解压插件,所有类型的文件解压通过一个命令x全搞定,再也不需要去记tar后面到底是哪几个参数了。

比如: x backup.tar.gz 或者 x temp.zip

最后,再加点特技

Zsh启动特技

可以通过一些配置,让Zsh在启动的时候输出启动画面,比如这个是不是很面熟呢?

咦?仿佛在哪里见过,但是就是想不起来了……

配置参考 这里

iTerm背景特技

iTerm还支持显示背景图,这样我们还可以把单调的终端界面配置得更加酷炫,比如可以这样:

还可以这样:

配置方法:Preferences -> Profiles -> Window -> Background Image 选择一个你喜欢的背景,然后通过Blending调整图片背景的透明度。

完结

iTerm和Zsh的配置就暂且介绍到这里吧,其实介绍到的也只是它们功能中我比较常用的,还有更多的功能等着你去发现。有了这些称手的工具和配置,我们就可以更加高效的去完成日常的编码和运维工作了。当然,此篇文章也不会就此为止,平常使用的过程中如果有新的心得和体会,我会持续更新……

相关阅读

程序员内功系列–序篇

支持原创技术分享,据说打赏我的人,都找到了女朋友!