背景
如果你对Bash比较习惯并且担心会丢失所有Bash知识,那么大可不必担心,99%的操作Bash和Zsh都是相同的.你可以很好的完成shell的转换.
这篇文章使用的Zsh version 5.0.2和最近的oh-my-zsh.我在它们安装后没有做任何配置.
在例子中用<TAB>
来表示敲击tab键,别傻乎乎的打出来~
'cd'中tab补全
让我们从最常用的出发.改变当前目录.
在Bash里当你按下<TAB>
你会得到当前目录下的文件.
这种情况下你只能进入到目录里,对于其他上下文来说并不是太有用.Zsh知道这点,它只给你显示有效的文件目录.
他不仅可以帮你匹配目录,而且还可以允许你用方向键进行选取.(<TAB>向后,<Shift+TAB>向前
)
对于TAB智能补全和用按键进行选择交互这种方式是Zsh简单易用的核心.
快速'ls'
不必输入整个目录的名字,只需要输入几个能唯一识别的字母就可以了.
吡!
清除历史
你可能熟悉使用<CTRL>+R
命令来寻找你使用过的命令.在Bash和Zsh中这是非常方便的方法.
Zsh有一个更好的方法.你可以输入一部分命令然后按<UP>
键.
它会找他你最近用过的以ls
开始的命令.还可以继续寻找前面的命令.
分享命令历史
在每个shell里Bash都有它自己的输入历史.但是在Zsh里它所有活动shell里都会有一个共同的历史.所以你就不用不得不记住你在哪里输入这个命令了.
扩展环境变量
在我们的shell里提供了环境变量.有些时候我们要使用这些变量值或者只是检查一下它们.
在Zsh里你可以按<TAB>
键使这些变量转换成它们所表达的值.
kill命令的tab补全
我通常用kill
前先使用ps
命令检查它们的进程号,或者当我确认的时候用pkill
命令,Zsh给你另一种方法.
在输入kill
命令后,按tab
键它会提供一个以当前输入字母为开始的程序列表,通过方向键你可以选择杀掉哪个进程.
命令参数
当想要了解一个命令的时候你通常需要输入-help
或者检查man page
.Zsh提供了更好的方法.
输入-
然后按<TAB>
键.
它会列出选项和说明.你也可以用方向键进行选择.
它步进在ls
命令中,他可以.它可以工作在像netstat
,git
,chmod
等大量的命令中.
Git辅助
每个人都有自己喜欢的git
命令的别名.oh-my-zsh给出了一大堆默认别名.
当你进入一个git目录的时候它也会有提示.
你可以查看它所在的分支名,上面的小叉号提示我有没有提交的更改.
上一个失败命令
你可能注意到了在截屏里的绿色小箭头.提示我上个命令运行成功.
如果命令不成功提示符就会变成红色,直到命令运行成功.
匹配
在Bash里我通常用find
搭配xargs
命令去寻找文件.Zsh内建对这一功能的支持.
让我们看看这个项目里的文件,而我要找到今天修改的文件.
我们只需要在ls
后面加入一个模式匹配符就可以得到我们想要的了.
另一个比较实用的技巧是使用**
可以递归查找.我要在目录下寻找Rakefile.
让我们加一个修饰符来递归查找大于20mb的文件.
这个方法不止限于ls
.在这个项目里查找有多少行Clojure代码.
让我们递归的删除在这个项目里的所有Clojure文件.
恩.但是我不太确信这个命令.所以让我们按<TAB>
列出所有文件来代替.
键入错误名字
经常我们忘了文件名字的大小写,或者错误的输入了文件名的中间部分而不是开头.Zsh能察觉到并帮我们自动的修改.
Zsh修改
有用的别名
除了git的别名,oh-my-zsh提供了许多有用的别名.
用...
帮你移到两层目录外真是太棒了.
Tabs named after the running process
Having the tab name changed to be the same as the running process is useful when you are hunting down where you are running that server.
在Vim里编辑长命令
你可以在Bash和Zsh里用<CTRL>+k
在长命令里来删除字符(我这里怎么是<CTRL>+h
?).但是有时候你想用功能更强大的编辑器来写长命令.
可以按<CTRL>+X <CTRL>+E
把当前命令放到你的$EDITOR
里.
温馨的$EDITOR
.
我们可以编辑命令保存然后就会退回到终端里.
工具插件
oh-my-zsh有一个为工具提供的插件的列表.我用rake插件可以允许你用<TAB>
进入在你Rakefile里的rake命令.
双击<TAB>
可以进入可以选择的列表.
仅此而已?
我直到最近才发现Zsh真他娘的好用啊.原因如下:
Tab补全和选择
活跃的插件社区提供我们基本的dotfile
Bash中99%的东西都能用
你准备好用zsh了吗?