2020年5月9日星期六

macOS 最佳命令行客户端:iTerm | 使用详解

macOS 最佳命令行客户端:iTerm | 使用详解


「终端」,给我们大多数人最深刻的印象,可能就是某一次在搜索教程的时候,里面出现了「在 Spotlight 里面搜索终端,在出现的小黑框里面输入 XX 命令」这样的话语。没错,躺在应用列表中的「终端」,正是我们除了利用「图形界面」外,和计算机进行沟通交流的另一种途径。
终端并不是专业用户的专利,实际上,各类用户都可以利用终端。熟练的自动化玩家,可以利用终端进行快速的脚本执行;开发者在日常的开发工作中,则会使用终端进行复杂的命令操作;即使是初入 Mac 的新手玩家,也可以利用终端对系统隐藏的功能进行设置……
终端可以进行多种操作
但是,macOS 自带的终端 Terminal.app 在功能上和一些专为 macOS 设计的第三方终端还是有所差距的。Mac 第三方终端中的佼佼者 —— iTerm,不仅受专业用户青睐、还有着强大的社区支持,即使是普通人也能快速上手。因此这篇文章,我想为大家介绍我心目中 macOS 上面最好、最强大的终端 —— iTerm。

到底什么是终端?

所谓的终端(Terminal)其实很好理解,它就是一个供输入、输出文本命令的窗口。无论是 macOS 自带的朴素的 Terminal 应用,还是作为本文主角的更加华丽的 iTerm,本质上都是一个窗口。
使用终端时还有一个容易与之混淆的概念「Shell」,这里我们借用另一篇文章《告别 Windows 终端的难看难用,从改造 PowerShell 的外观开始》里的一个比喻来厘清两者关系:
Terminal 就像是一个人的衣服,可以有各种颜色、形状甚至功能;那么 Shell 则是这个人,你和他沟通来获得信息,并且他可以在与你沟通的过程中事先告诉你许多信息、提醒,甚至自动帮你补充你想说的话。
终端是用户和电脑沟通的途径
macOS 内置的 Terminal App、Windows 最近广为宣传的 Windows Terminal 以及 Linux 上面的各种「终端模拟器」等等,都是终端工具 —— Terminal。今天的主角 iTerm,则是一个专为 macOS 开发的第三方终端工具。
我们在 iTerm 等终端工具中,可以输入「脚本」、「命令」等,执行某种操作,来和计算机进行沟通。这是现代计算机中「终端工具」最大的功能和作用。

什么让 iTerm 脱颖而出?

强大的、专为 Mac 开发的富余功能

将 iTerm 和其他终端工具区分开来的,就是它丰富、强大、且专为 Mac 设计的功能。这些功能在 iTerm 的官网上足足介绍了有 30 余个。其中,最让我印象深刻的,也是我目前几乎离不开的功能就是:
  • 全面的快捷键支持,上下左右任意分屏,以及通过快捷键建立 Quake 窗口
  • 通过 Profile 配置文件保存多个窗口配置,能够一键套用现成配置
  • 专为 macOS 编写的 Shell 集成脚本
  • 利用 Metal 框架的 GPU 渲染加速
其他诸如「剪贴板历史记录」、「图片显示」、「密码管理」等等,也都是 iTerm 所拥有的强大功能。这些为 Mac 开发设计,并为 Mac 优化的功能,让 iTerm 成为 macOS 上面终端工具的不二之选。在后文中我会对这些功能和使用场景进行具体详细的介绍。

丰富的社区主题支持

除了上面提到的 iTerm 本身强大的诸多功能以外,iTerm 还获得有社区强大的主题、配色支持,网上别人晒出的靓丽主题,你几乎都可以一键安装。目前 GitHub 上面最大的开源终端主题库,就是以 iTerm 命名的 mbadolato/iTerm2-Color-Schemes
iTerm 的丰富主题
除此之外,iTerm 还支持有「备选字体」的渲染。这一特性对在命令行界面使用特殊字符的我来说非常重要,备选字体能够确保我的特殊字符渲染是正确无误的。

iTerm 的特色与功能

由于 macOS 源生自历史悠久的 BSD,于是到今天 Mac 都保证着类 UNIX 的属性。这也就意味着 macOS 本身对「命令行环境」,也就是我们的终端环境,非常友好。由于 Mac 具有现代化的、优秀的字体渲染,以及对 UTF–8 字符编码格式的友好支持,我甚至可以说 macOS 上面的命令行环境体验是所有系统中最为优秀的。
有了优秀的「底子」,iTerm 更是将 Mac 上面的命令行体验发扬光大。接下来我就来具体为大家介绍 iTerm 能在 macOS 上面玩出怎样的花样。

命令行环境的基础使用

配置 Shell 环境

前文我提到了,我们命令行环境的使用体验与「Shell 和 Terminal」这两个环境都息息相关。配置好一个优秀的 Shell 环境,我们不仅会有色彩和语法高亮,还会有诸多有用的信息,让我们命令行环境下的工作效率倍增。因此我先来简单介绍一下 Shell 的环境配置小技巧。
将默认 Shell 配置成个性化样式
在以往 Mac 平台(包括大部分 Linux 系统)里,命令行环境默认的 Shell 往往都是 bash。但是 bash 本身并不太用户友好,缺少很多诸如「命令提示」、「Tab 自动补全」以及「基于内容的色彩高亮」等基础功能。市面上有诸多有更多丰富功能的 Shell,比如 zshfish 等等。在今年秋季即将发布的 Mac 新版系统 —— macOS Catalina 中,macOS 直接将默认 Shell 升级为 zsh,因此我也推荐大家直接使用 zsh 这个优秀的 Shell 以及一个方便的 zsh 配置框架 —— oh-my-zsh。推荐阅读:《让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南》。这篇文章里面详细的介绍了 zshoh-my-zsh 的配置方法,我这里就不再赘述了。
相信你到这里就已经将你的 Shell 环境从「白底黑字」升级换代为更为优秀的 zsh 了。实际上,到这一步你的 Shell 环境就已经完全足够日常使用,但是如果你看的我前文的截图,想知道更加酷炫的 Shell 命令是如何配置的,我这里推荐 romkatv/powerlevel10k 这个主题引擎,配上 Nerd Font 就可以达到我截图中的效果了。这些就不属于我们本文的介绍范畴,有兴趣的同学可以在我的 spencerwooo/dotfiles 仓库中找到更多信息。

色彩、主题的配置

配置好了我们的 Shell 环境,我们下面开始 Terminal 环境的介绍。事实上,好看的色彩主题配置非常简单就能搞定。iTerm 有着社区最庞大的主题支持仓库,iTerm2-Color-Schemes 有超过 200 种色彩主题的配置,我们直接访问 仓库的 iTerm 主题配置文件夹 就可以下载得到诸多主题文件,这些文件是 .itermcolors 结尾的配置文件。
在 iTerm 中使用配置文件
我们下载之后,在 iTerm 偏好设置里面选择「Profiles - Default - Colors」,选择右下角「Color Presets」点击最下方「Import」即可导入主题配置文件。有关主题的选择,推荐大家阅读我之前的一篇文章:《10 个 Terminal 主题,让你的 macOS 终端更好看
iTerm 的主题设置
在「Profiles - Default - Window」,我们还可以设置 iTerm 的默认窗口的性质,比如窗口的透明度、模糊以及背景图片等等。

利用 Profile 窗口配置保存配置信息

事实上,上面的所有配置在 iTerm 里面都相当于「一个会话(session)的配置」,为了方便大家理解,我们就称之为「一个窗口的配置」。我们可以设置、保存多个 iTerm 窗口的配置文件,在 iTerm 中,这个配置文件叫做 Profile。
将配置保存下来
Profile 除了能够配置并记录一个窗口的长宽、所使用的主题、字体以及背景等等,还有非常多可以进行自动化配置的信息。比如,我们可以自定义一个 Profile:通过快捷键新建 iTerm 窗口,打开窗口之后自动通过 SSH 登录另外的服务器,并在 iTerm 的右上角常显「远程服务器」的提示信息等等。这样,我们的 iTerm 就有着无穷无尽的自动化配置能力了。

其他

iTerm 的快捷键设置
iTerm 有着非常完善的 macOS 快捷键配置、窗口管理以及 Touch Bar 的集成,这里面有很多是其他跨平台终端工具,甚至包括原生终端在内,都很难实现的。

亮点

iTerm 在常规的这几项使用技巧基础之上,还有着许多在 macOS 其他终端工具里面找不到的小功能。这些功能使得 iTerm 在 Mac 上面的使用体验异常优秀。接下来我就为大家介绍一下 iTerm 独有的几个小功能。

全局快捷键窗口

迅速唤出的 iTerm 窗口
在文章开头,我就提到了 iTerm 快捷键窗口(Quake 窗口)的功能。简单来说,iTerm 能够让我们通过快捷键迅速的在任意界面唤出一个终端的下拉窗口。这样的特性让我们在「多任务工作」使用终端的时候效率倍增。
设置唤出 iTerm 的快捷键
我们在 iTerm 的「Preferences- Keys - Hotkey」处,可以看到「Create a Dedicated Hotkey Window…」的字样,这就是「快捷键窗口」。我们直接点击即可建立一个新的快捷键窗口。
建立快捷键窗口
接下来,我们将快捷键窗口的触发快捷键 Hotkey 进行绑定,选择确定即可配置好我们的快捷键窗口。这样只要我们的 iTerm 在后台是开启的状态,即可通过快捷键全局唤出下拉窗口。
唤出 iTerm 窗口的设置
实际上,我们创建快捷键窗口时,在 iTerm 中也新建了一个叫做 Hotkey Window 的 Profile 窗口配置。默认的快捷键窗口是占据整个横向宽度、从上面下拉的一个窗体,我们可以在「Profile - Hotkey Window」里面将窗口的大小、唤起位置以及其他相关设置进行配置,自定义我们的快捷键窗口。

Shell Integration 加持下 iTerm 强大的功能

接下来,iTerm 为了让自己和 Mac 本身结合的更加完美,专门开发了「Shell Integration」,很多时候我们可能都不太习惯终端环境的操作方式,Shell Integration 这时候往往可以助我们一臂之力。我们可以在 iTerm 菜单栏「iTerm2 - Install Shell Integration」处进行安装。
Shell Integration
点击按钮,iTerm 会自动执行一个下载命令,将脚本下载安装到你的 Mac 命令行环境中。利用 Shell Integration,我们可以让 iTerm 与 Mac 的命令行环境配合的更加完美,不仅会有更好的信息集成,还能让 iTerm 增加诸多独占性的功能。下面介绍的功能大多都需要 Shell Integration 的安装。
命令自动补全
命令自动补全
不少命令相对较长,直接手动输入还是比较麻烦。iTerm 内建了对命令的记录和补全功能。我们通过快捷键「Command + ;」即可唤出自动补全的菜单,iTerm 会根据我们当前的已经输入的命令,自动回溯并判断需要补全的命令,并提供多个选项供我们选择。随着使用次数的增加,自动补全的内容也会越来越精确,iTerm 也就越能「猜中」我们的输入习惯。
剪贴板历史记录
调用剪贴板历史记录
iTerm 会自动记录剪贴板的历史,不同于 macOS 其他剪贴板工具对全局范围内的剪贴板进行监控,iTerm 只会记录复制/粘贴进入 iTerm 的内容。我们通过快捷键「Command + Shift + H」即可唤出剪贴板历史记录下拉菜单,从而选择我们曾经复制过的命令等内容,直接粘贴进入 iTerm。
历史命令重播 Instant Replay
历史命名重播
iTerm 会自动对一次会话(session)里面我们曾经输入、执行过的命令进行记录,这对我们回溯之前执行过的命令有着非常大的帮助。比如,有时候我们使用 top 等命令时,由于输出会将之前执行过的命令清空,因此我们不能简单地通过向上滑动找到我们之前的命令。历史命令重播 Instant Replay 能够让我们自由的回溯一次会话中的全部命令,甚至可以将命令保存,以供稍后查看。我们通过快捷键「Command + Option + B」即可唤出「历史命令重放」的界面。
有关 Shell Integration 的更多功能,请参考:Shell Integration - Documentation - iTerm2 - macOS Terminal Replacement

其他

除了上面我个人觉得非常有用,能够让我们 Mac 终端体验大幅增加的功能外,下面这些小功能也是值得一用的。
  • 密码管理器:iTerm 内建了密码管理的功能,我们可以将常用的服务器登录密码存储至 iTerm 里面,方便使用。
  • 时间戳:iTerm 可以为每条命令显示其执行时间点,我们可以通过快捷键「Command + Shift + E」打开时间戳。
  • 状态栏:新版本(3.3.0)中,iTerm 正式加入了状态栏。我们可以自定义用户、主机、命令、时间以及资源利用率等内容的显示。
  • 智能选择:在需要选择日期、邮箱、网址以及由双引号括起来的内容时,有时候双击并不能正确的选择我们想要的内容,iTerm 通过「智能选择」能够方便的让我们利用「连击四下」这一操作方式,正确匹配我们想要选择的内容。
以上就是 iTerm 提升终端工作效率、让我们方便利用命令行在 Mac 上面进行交互的一些小功能。除此之外,iTerm 为了让我们能够在 Mac 上面能更加有效的利用优秀的 Shell 环境,还开发了许多脚本。下面我来具体介绍一下。

专为 Shell 开发的集成脚本

iTerm 专门为 macOS 上面的 Shell 开发了相应的集成脚本,叫做 Utility。如果你在上面安装了 Shell Integration,那么下面我介绍的工具都可以直接使用。iTerm 利用 Utility 让本来功能相对单一、封闭的命令行环境和 Mac 的图形界面环境配合更加紧密。

imgcat 直接显示图片

imagecat 命令可以显示图片
Shell 内置的命令 cat 会将一个文本文件的内容输出出来。类似地,iTerm 的 imgcat 可以将图片直接在终端中显示出来。我们只需要通过命令:imgcat <图片名称> 即可将图片显示在 iTerm 里面。

imgls 文件夹下图片行内显示

imgls 命令显示缩略图
imgcat 相对应的是 imglsls 命令的作用就是会将目录下的全部文件和文件夹进行列出。iTerm 的 imgls 则是会将目录下的图片文件在列出时加上缩略图的显示,这样我们就不必在 iTerm 里面看着图片名称而需要再打开 Finder 查看图片本身是什么了。

其他

除了上面我介绍的几个我较为常用的命令外,iTerm 还有下面一些命令,大家可以根据自己需求进行使用:
  • it2dlit2ul:通过 iTerm 登录服务器之后,直接上传、下载文件
  • it2attention:让 iTerm 通过特效、通知等方式引起我们的注意(比如在 Homebrew 更新/安装完成、或 Aria2 下载文件结束之后,自动执行此命令从而让我们知晓任务的完成)
  • it2check:检查当前使用的终端是否为 iTerm
  • it2setkeylabel:设置 iTerm 在 Touch Bar 上面的功能显示标签
更多 iTerm 的工具和命令请直接参考:Utilities - Documentation - iTerm2 - macOS Terminal Replacement

总结

虽然在 2019 年的今天,我们大多数普通用户利用「图形界面」操作电脑已经非常熟悉了,但「终端」依旧是一种不可或缺的命令执行途径。利用「图形界面」进行操作非常繁琐的一件事情,如果利用「终端」直接通过几行命令进行执行,可能会事半功倍。(甚至会更酷一些。😝)
macOS 是一个对「命令行环境」非常友好的操作系统,而 iTerm 可能是 macOS 上面功能最为强大的「终端」。希望本篇文章能够让你 Mac 的「终端环境」全面提速,将效率、自动化进行到底。感谢阅读。

没有评论:

发表评论