PPxu

通过 Oh-My-Zsh 和 Z 成为一个命令行高手

原文链接: www.smashingmagazine.com

通过 Oh-My-ZSH 和 Z 成为一个命令行高手

命令行正在迅速成为每个 web 开发者的工作流中的一部分。随着 Grunt、Gulp 和 Bower 这些提升生产效率而且运行在命令行的工具的到来,我们可以看到命令行已经成为了一个 对新手更加友好和顺手的地方,对专家也是一样。

这篇文章提供了对一些日常工作流中的命令行最佳工具的深入研究,帮助你完成一份完全自定义的配置。此外,请记得去查看我的 如何成为一个命令行高手系列1,当然是免费的。

获取合适的终端

在我们开始使用 ZSH、Z 和相关工具之前,获取一个合适的终端应用来运行是非常重要的。OS X 和 Windows 上默认的 Terminal 和 Powershe 应用都有许多不完善的地方。

对于 OS X 用户,推荐使用 iTerm 22 替代 OS X 上默认的 Terminal。iTerm 2 引入了一些常规终端中没有的功能,包括你在文本编辑器中经常使用的命令。它支持面板分割、自定义配色方案、粘贴历史、完善的热键控制,以及 许多3 其他方便的特性,当你对终端用的更顺手的时候会很有用。

Windows 上有内置的 PowerShell。大多数用户发现它和典型的用来跑网站的 UNIX 服务器上的界面有相当大的不同;它的在线教程也非常匮乏。出于这个原因,推荐使用一个可以提供和真实 UNIX 的命令行体验比较接近的模拟器,像 Linux 和 OS X 做的那样。

这里你有不少选择。最简单的应该是安装 Cmdr,它提供了 Git 集成,自定义提示符和配色方案。对大多数人,这就足够开始使用所有主要的 web 开发工具了。然而,它还不能完成我们下面要谈到的 ZSH 和 Z 的功能。

如果想要一个完善的 UNIX 模拟器,Cygwin4 可以允许我们运行所有的 UNIX 命令,并且可以搭配 Oh-My-ZSH 工作。它对系统配置有一定要求,不过如果你非常习惯于 Windows 环境,还是值得一试的。此外还有一个集成的 OH MY CYGWIN5,可以加快你的安装过程。

使用 ZSH 和 Oh-My-ZSH

当你开始使用一个终端应用,无论是在服务器还是本地电脑上,它都是运行一个叫 Bash 的 shell。Bash 是目前最流行的 shell,几乎每个基于 UNIX 的操作系统上都有。不过,除了 Bash 还有其他 shell 可以使得 web 开发者的终端用起来更快更顺手。

其中一个在 web 开发者中最流行的 shell 就是 Z shell,或者叫 ZSH。搭配这个,我们会使用一个叫做 Oh-My-ZSH6 的 ZSH 框架。

安装 Oh-My-ZSH 非常简单。只需执行如下命令,然后重启终端:

`curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh`

现在,你每次打开一个终端会话,你就会使用 ZSH 而不是默认的 Bash!

ZSH 设置

在进入后面几章之前,我们需要了解 ZSH 的设置。它们保存在你的 home 路径下的一个 .zshrc 文件中。这是一个隐藏文件,因此你可能看不到它,不过你可以通过在终端执行 open ~/.zshrc 来看到它。可以把 open 换成你最喜欢的编辑器命令,比如 nanosubl 或者 vim

现在,我们还没有对这个文件做任何改动,只是打开了而已。每次你修改了这个文件,你需要 更新 一下终端使得改动生效。要做这个,你可以关闭当前标签并打开一个新的,或者在终端执行 source ~/.zshrc 命令。

终端定制

自定义终端的展现是你能做的最好的事情之一。不是说这样做会让你看起来像一个非主流的程序员,而是这样可以通过不同的颜色显著提高可读性。而且它还可以通过显示一些重要的相关信息比如文件路径、Git 状态等来提高生产效率!

提示符

提示符是指当你准备输入时终端上显示的文字。提示符会提供一些关于你的项目的有用信息,比如当前的 Ruby、Node.js 之类的版本,当前的 Git 仓库的状态,上一个任务的运行结果,以及当前的工作路径。

你可以自定义隐藏你的路径,不过已经有人创建了一个满足你的需求的提示符。

ZSH 的主题在 .zshrc 文件里设置。找一下类似 ZSH_THEME="robbyrussel" 的东西 —— 这就是 ZSH 自带的默认主题。我推荐这儿设置成 ZSH_THEME="random",这样每次你打开一个新的终端标签或者执行 source ~/.zshrc,就会随机指定一个主题。这样运行一段时间直到你找到一个喜欢的主题;你可以通过执行 echo $ZSH_THEME 找到当前主题的名字。

01-cobald2-opt-small

7

(查看大图8)

你可以在这个 wiki9 上浏览所有的 ZSH 主题和提示符。由于总共有上百个主题,所以不是所有的主题都会被 ZSH 默认引入。你想要的任何主题都要下载到 ~/.oh-my-zsh/themes;这是个隐藏的路径,你可以通过执行 open ~/.oh-my-zsh/themes 来访问到它。

这是一些流行的主题:

02-agnoster-opt-small

10

Agnoster11 (View large version12)

03-cobalt2-opt-small

13

Cobalt214 (View large version15)

04-bira-opt-small

16

Bira17 (View large version18)

注意 很多主题都需要额外的字体来显示箭头和 Git 图标。你可以在 GitHub19 上下载这些字体;然后,记得在 iTerm2 的设置里设定。

05-bira-opt-small

20

(查看大图21)

配色方案

Now, the prompts define the standard color to be used, but we’ll use iTerm2 themes to customize what those colors actually look like. By default, the themes come with your basic red, green, yellow and blue, but we can tweak those to be the exact variants that we want. 现在,提示符定义了能使用的标准颜色,不过我们可以使用 iTerm2 的主题来定制这些颜色到底是什么颜色。默认情况,这些主题使用基本的红、绿、黄和蓝,不过我们可以按照我们想要的来改变这些。

06-schemes-opt-small

22

你可以把这些颜色看作是我们可以操作的变量。 (查看大图23)

在 “Preferences” → “Profiles” → “Colors”,你可以编辑这些颜色,甚至创造你自己的主题, 或者直接拿一个现成的主题。

ZSH 的 Cobalt2 提示符也是一个 iTerm2 主题24 自带的,你可以通过 Github 的搜索找到 上百个这样的25;特别是 Bastien Dejean 的仓库,放了一些非常有趣的。

文件选择

现在我们的终端看起来已经非常赞了,不过我们用 ZSH 和相关工具到底能做什么呢?可能其中一个最有用的功能就是能列出和选择文件和文件夹。如果你曾经试过完整的拼出一个文件的名字,纠结过大小写,或者面对过一个长的不可思议还带空格的文件夹列表,你就会体会到使用 Bash 的痛苦和限制。

文件夹和文件选择支持任意的终端命令:cdtrashcpopensubl 等等。不过出于这篇教程的目的,我们这里用 cd 处理文件夹,open 处理文件。

先输入 cd (注意 cd 后面的空格),然后按 “Tab” 键 两次。现在你可以使用方向键,在文件和文件夹之间移动。要选择一个文件夹,按 “回车”。然后你可以再次按 “Tab” 和 “Tab” 来浏览子目录或者按 “回车” 来执行命令。

这个也可以用来补全文件和文件夹的名字。假设我有两个文件夹,css//Capitalize。如果我输入 cd c 然后按两次 “Tab”,我就会在所有 C 开头的文件夹之间循环切换。你会看到这是忽略大小写的。当你有许多名字类似的文件的时候这点特别有用。

最后,这个也可以用来选择你没有完全记住的命令名。举个例子,如果你正在使用 MongoDB,它有 13 个相关的命令:mongodmongodumpmongoexportmongofiles mongoimport 等等。

输入 mong 然后点击 “Tab”,你就会看到所有以 mong 开头的可用命令。

ZSH 插件

ZSH 支持通过添加插件来扩展内置的功能,实际上它已经附带了一些很棒的插件。要启用一个插件,打开 .zshrc 文件,向下滚动直到看到定义插件激活的地方。要添加一个新的插件,只需要在圆括号中间输入名字,记得相邻名字之间要有一个空格。

`plugins=(git cloudapp node npm bower brew osx extract z)`

每次你添加好一个插件,你需要执行 source ~/.zshrc 或者打开一个新的标签。

一些推荐的插件有:

  • git

Oh-My-ZSH 默认开启,它支持 Git 别名、标签补全以及所有 Git 命令的描述。

git + tab

  • cloudapp

支持从命令行上传文件到 CloudaApp。

cloudapp Archive.zip

  • node

在浏览器打开当前版本的 Node.js API。

node-docs http

  • npm

给 npm 添加自动补全,显示所有的 npm 命令。

npm + tab

  • bower

给 Bower 命令添加自动补全。

bower + tab

  • brew

给所有 Brew 命令添加自动补全和描述。

brew + tab

  • osx

支持在终端上使用很多 Finder 命令26

  • extract

解压所有类型的压缩文件。

  • z

关于这个将在下一章讨论

Oh-My-ZSH wiki27 上可以看到完整的插件列表。

使用 Z 跳转 “Frecent” 文件夹

Z 不是 Oh-My-ZSH 的一部分,不过对任何苦于使用命令行的人来说它都是一个完美的搭配。Z 背后的想法是把你经常和最近 —— “Frecent” —— 访问的文件夹建成一个列表,然后允许你通过一行命令来快速的跳转,而不用在一个层层嵌套的目录结构中来回切换。

要安装它,确保 Z 已经包含在上面提到的插件列表中。尽管这对大多数人都有效,不过有一些用户还是会遇到麻烦。如果碰到这种情况,下载 Z28,放到你的 home 目录下,路径是 ~/z.sh 。然后,在 .zshrc 文件中,加入下面的代码并更新 .zshrc 文件。

# include Z, yo
. ~/z.sh

当它安装好后,使用 cd 命令浏览你常用的目录。Z 会监视哪些是你经常和最近访问的,并建立一个加权的路径列表。

在这样移动几个小时之后,你可以使用 z 命令再加上你的路径中的一个词。它会通过模糊匹配指出哪个文件夹是你想要去的,而且这几乎都是正确的!

  • z styles 可能跳转到 ~/Dropbox/projects/0202-coffee-shop/styles.

  • z pizza 可能跳转到 ~/Dropbox/projects/0300-pizza/.

  • z pizza styles 可能跳转到 ~/Dropbox/projects/0300-pizza/styles.

  • z 303 可能跳转到 ~/Dropbox/projects/0303/candy-store/.

Z 高级命令的完整列表,可以访问这个 GitHub 仓库29,或者观看关于 Z 的命令行高手视频。

更多

作为开发者,我们都知道强化我们的工具以及不断添加新的工具到我们的工作流中是多么重要。命令行对于开发者来说是最值得掌握的工具之一。在这篇文章中,我们仅仅了解了命令行用途的冰山一角。查看 命令行高手30 上的11个免费视频可以了解如何让命令行用起来更顺手。

(al)

脚注

  1. 1 http://commandlinepoweruser.com/
  2. 2 https://www.iterm2.com/
  3. 3 https://www.iterm2.com/features.html
  4. 4 https://www.cygwin.com/
  5. 5 https://github.com/haithembelhaj/oh-my-cygwin
  6. 6 http://ohmyz.sh/
  7. 7 https://www.smashingmagazine.com/wp-content/uploads/2015/07/01-cobald2-opt.png
  8. 8 https://www.smashingmagazine.com/wp-content/uploads/2015/07/01-cobald2-opt.png
  9. 9 https://github.com/robbyrussell/oh-my-zsh/wiki/themes
  10. 10 https://www.smashingmagazine.com/wp-content/uploads/2015/07/02-agnoster-opt.png
  11. 11 https://github.com/robbyrussell/oh-my-zsh/wiki/themes#agnoster
  12. 12 https://www.smashingmagazine.com/wp-content/uploads/2015/07/02-agnoster-opt.png
  13. 13 https://www.smashingmagazine.com/wp-content/uploads/2015/07/03-cobalt2-opt.png
  14. 14 https://github.com/wesbos/Cobalt2-iterm
  15. 15 https://www.smashingmagazine.com/wp-content/uploads/2015/07/03-cobalt2-opt.png
  16. 16 https://www.smashingmagazine.com/wp-content/uploads/2015/07/04-bira-opt.png
  17. 17 https://github.com/robbyrussell/oh-my-zsh/wiki/themes#bira
  18. 18 https://www.smashingmagazine.com/wp-content/uploads/2015/07/04-bira-opt.png
  19. 19 https://github.com/powerline/fonts
  20. 20 https://www.smashingmagazine.com/wp-content/uploads/2015/07/05-bira-opt.png
  21. 21 https://www.smashingmagazine.com/wp-content/uploads/2015/07/05-bira-opt.png
  22. 22 https://www.smashingmagazine.com/wp-content/uploads/2015/07/06-schemes-opt.png
  23. 23 https://www.smashingmagazine.com/wp-content/uploads/2015/07/06-schemes-opt.png
  24. 24 https://github.com/wesbos/Cobalt2-iterm
  25. 25 https://github.com/search?q=iterm+extension%3Aitermcolors&ref=searchresults&type=Repositories&utf8=%E2%9C%93
  26. 26 https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins#osx
  27. 27 https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins
  28. 28 https://github.com/rupa/z/blob/master/z.sh
  29. 29 https://github.com/rupa/z
  30. 30 http://CommandLinePowerUser.com

SmashingConf New York

Hold on, Tiger! Thank you for reading the article. Did you know that we also publish printed books and run friendly conferences – crafted for pros like you? Like SmashingConf Barcelona, on October 25–26, with smart design patterns and front-end techniques.

Workflow

↑ Back to top Tweet itShare on Facebook