关于 Zsh,我最喜欢的那些特性

Zsh已经被追求交互式shell体验的开发者广为接受。虽然我很晚才成为这群开发者中的一员,但希望你也能加入到行列之中。

自从我第一次登录shell,我就开始学习bash配置文件。我整理自动补全,别名和函数,这些有助于快速完成重复性工作。当Zsh开始流行时,博客和评论的焦点是bash配置文件中已经配置的特性。我始终不为所动。直到读到oh-my-zsh相关的内容。该项目为Zsh配置了默认属性,并且有实用的在线引导。作为后来者,我以说服自己立刻转换shell为出发点写下这篇文章。

背景

如果你很熟悉Bash,担心会失去已经积累的知识。那么,不必担心,99%的Bash操作仍然适用于Zsh。你可以改变shell而不必失去积累的知识。

本指南使用了截至本文为止最新5.0.2版本的Zsh和oh-my-zsh。从基本安装开始,我没有改便任何东西。

当你在例子中看到<TAB>字符串,它表示按下tab键,而不是输入该字符串。

‘cd’命令的自动补全

让我们从一项常用的任务开始。不起眼的目录切换指令。

当你在Bash中按下<TAB>键,你会看到当前目录的文件列表。

此时,cd命令并不是特别有用,因为你只能进入目录。Zsh知道这一点并且会给你显示出可能的有效目标。

它不仅能帮你匹配,而且还允许你使用键盘导航到你想要的目录下。

TAB自动补全和使用键盘调节选项的结合是Zsh易于使用的核心所在。

‘ls’命令自动补全

你不必输入整个目录名称,只需输入初始几个可以唯一区别与其他目录的字母,Zsh会自动匹配出剩余部分。

变戏法一样!

聪明的历史记录

你可能熟悉 <CTRL>+R 递归查找历史命令的使用。在Bash和Zsh中,这是命令重用很好的方法。

Zsh要更胜一筹。你可以输入命令的一部分并按下<UP>键。

它会找到历史记录中最后一条以’ls’开头的指令。如果需要,我们可以继续点击向上键循环查找。

命令历史共享

在Bash中,每一个shell都有自己的历史。Zsh与所有现行的shell共享命令历史。这意味着你不必记住你在哪里输入过命令。

环境变量展开

在shells中可以访问用的环境变量。有时,我们想要改变这些变量值或者只是查看它们。

在Zsh中,你可以按下<TAB>键来展开这些值。

进程关闭命令的自动补全

通常,我会在用ps命令查看进程值后使用kill命令,或者如果明确可以使用pkill,Zsh给了你另外一个选择。

敲击tab键,你将会得到一个可用键盘导航的命令列表,该列表以你在kill命令后输入的字符开始。

那个选项是什么?

为了弄明白一条命令如何工作,通常你会尝试执行它,或者不带参数,带-help参数或者查看帮助页面。Zsh给了你另外一个选择。

输入选项的开始,然后点击<TAB>。

上述操作会列举出有内联说明的选项名称。你也可以选择使用键盘导航。

这不只限于ls命令。同样适用于大量像netstatgitchmod这样的令人困惑的命令。

Git的改善

每个人都有自己最喜欢的git命令的别名。oh-my-zsh也有大量的别名。

当进入git控制的目录时,它还能改善给你的提示。

你可以看到我所在的分支名,那个小的闪电符号是在提示我当前目录下有未提交的更改。

上一条指令执行失败

你可能已经注意到截图中提示开头的绿色箭头。这表明上一条命令被正确执行。


如果命令失败,那么在下一条指令被正确执行前该提示符会变成红色。

文件名生成

在Bash中,我经常使用find命令和xargs一起进行查找,使用它们完成任务。Zsh内建的globbing支持涵盖了大部分的应用场景。

假设我们需要验收项目,只需要找出今天发生变更的文件。

我们可以给ls命令的搜索部分添加限制参数来筛选出我们想要的。

另一个方便的技巧是使用**,这是一种递归的搜索。在当前目录下什么位置可以找到Rakefile实例?

让我们再使用修饰符来递归查找超过20mb的文件。

不仅仅局限于ls指令的使用。在该工程中使用了多少行Clojure代码?


假设我们想要递归删除该工程中的大部分Clojure文件。

嗯。我非常确信这一点。所以,让我们按下tab键来详细列出所有文件。

你的意思是说这不是吗?

有时我们会忘记文件名,或者会误输文件名的中间部分而不是从头开始。Zsh知道我们输错了,而且会自动更正。

Zsh自动更正。

有用的别名

和git的别名一样,oh-my-zsh也有很多有用的常用别名。

我非常喜欢使用…来跳转两级目录。

运行进程设置标签名

当你想要知道服务器运行在什么环境下,将标签名改成和运行进程一样非常有用。

在Vim中编辑长命令

使用<CTRL>+K删除字符这样的快捷键,你可以在Bash和Zsh中编辑长命令。但是,有些时候你想要功能更强大的编辑器来编辑命令。

无论何时遇到这种情况,点击 <CTRL>+X <CTRL>+E将当前命令输入到 $EDITOR中。

熟悉的$EDITOR。

我们可以编辑命令,保存退出后返回到终端中。

你最喜欢的工具插件

oh-my-zsh有一张你可能使用的综合工具插件列表。我使用了rake插件, 它允许你从Rakefile中输入可用的rake命令。

双击<TAB>进入键盘导航列表。

是不是很棒?

直到最近我才意识到Zsh是多么有用的交互式shell。不得不更换shell的理由如下:

  • 各种Tab补全和导航
  • 充满活力的插件社区为我们的dotfile提供合理的基准。
  • 你在Bash中学到的99%仍然适用。
  • Tab complete and navigate all the things
  • A vibrant plugin community providing a sensible baseline for our dotfiles
  • 99% of what you know from Bash still works

你准备好使用chsh命令修改shell配置了吗?

2 收藏 评论

关于作者:汤晓

(新浪微博:<a href="http://weibo.com/u/2151517721">@ashiontang</a>) 个人主页 · 我的文章 · 10

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部