前言

你的鼠标正在拖慢你的速度。

鼠标的发明为我们与计算机的交互创造了一种新的方式。我们可以单击、双击、三连击,甚至还能猛击某个应用。鼠标和图形交互界面的产生,使得使用计算机对普通用户来说变得更加容易。但是对于程序员来说,鼠标有很大的负面影响。

编译、构造软件时,我们会使用多个程序一起工作。比如一个 web 开发者可能会同时运行一个数据库控制台,一个 web 服务端和一个文本编辑器。用鼠标在这些窗口之间来回切换不仅会浪费宝贵的时间还会打断你的思路。这看起来似乎没什么,但是你的手需要从键盘移开,再放到鼠标上,然后定位,最后再完成鼠标操作,这个过程非常容易让人分心。

使用 tmux,你可以创造一个如图1(使用 tmux 作为开发环境)所示的工作环境。使用 tmux 的窗口,你可以非常轻松地在一个非常简单的环境中管理文本编辑器、数据库控制台、本地 web 服务器。你还可以把 tmux 窗口分割为多个区域,让多个程序并排显示或运行。这意味着你可以在一个窗口里让文本浏览器,irc 聊天客户端,或自动化测试与你的主编辑器同时显示、运行。

最棒的是,你仅仅通过键盘快捷键就可以非常快速地在这些窗口和面板之间互相移动,这样会极大地提高你的注意力和生产效率。

在这本书中,你可以学到如何配置、使用并自定义 tmux。你会学习到如何同时管理多个程序,编写脚本来创建自定义的环境,还能学会如何使用 tmux 与其他人远程工作。使用 tmux,你可以创建一个几乎纯键盘操作的工作环境。

figure1

图1 - 使用 tmux 作为开发环境

什么是 tmux?

tmux 是一个终端复用器(terminal multiplexer)。它让我们可以使用单一环境就可以登录多个终端或窗口,每个终端或窗口都运行着独立的进程或程序。例如,我们可以打开 tmux 然后运行 Vim 编辑器。然后可以新建一个窗口运行一个数据库控制台,然后在这些程序之间来回切换,这一切都是在一个会话(session)中进行的。

如果你使用了一个现代操作系统并且终端有标签页功能的话,这听起来并不新鲜。但是同时运行多个程序只是 tmux 的特性之一。我们可以将窗口(window)划分为水平或垂直面板(pane),也就是说可以在同一个屏幕上并排显示或运行两个或多个程序。这些操作都不使用鼠标。

我们还能从一个会话中分离出来,让整个工作环境都在后台运行。如果你以前用过 GNU-Screen,那你对这个特性一定感到很熟悉。tmux 与 GNU-Screen 有许多的相似之处,但是 tmux 的功能更多,而且 tmux 的配置更容易。由于 tmux 使用了 client-server 模型,因此可以在一个中央位置控制窗口和面板,甚至可以从一个终端窗口就实现多个会话之间的切换。这个 client-server 模型还可以让我们创建 tmux 脚本并与其他窗口或应用程序交互。

在本书中,我们会探讨以上所有这些特性等等。

谁应该读这本书

本书的目标是帮助 Mac 或 Linux 程序员在使用终端时更加得心应手。

如果你是一个软件开发人员,你会看到如何使用 tmux 构建一个开发环境,通过它你可以轻而易举地同时使用多个终端会话工作。并且如果你已经能非常熟练地使用 Vim 或 Emacs,你会看到 tmux 是如何进一步提高你的工作效率。

如果你是一个系统管理员或偶尔与远程服务器打交道的开发人员,你可能会对如何利用 tmux 持久地监测服务器状态感兴趣。

本书内容

本书将会向你展示如何把 tmux 融入到你的工作中,包括 tmux 的基本特性以及如何在每天的工作场景中应用这些特性。

在第 1 章,基础知识。你会学到关于 tmux 的基本特性,包括创建会话,面板,窗口以及学习如何执行基本的操作。

在第 2 章,配置 tmux。你会学习到如何重定义许多 tmux 默认的快捷键和外观配置。

在第 3 章,脚本定制 tmux 环境。你会学习到如何编写你自己的开发环境脚本,包括使用命令行界面,配置文件和 tmuxinator 工具。

之后,在第 4 章,处理文本和缓冲区。你会学习到如何通过键盘快捷键在缓冲区之间移动文本,如何选中并复制文本,以及如何工作于多个粘贴缓冲区。

接下来,在第 5 章,使用 tmux 结对编程。你会学习到如何配置 tmux,使你和同事可以在不同的计算机上使用 tmux 基于同一份代码一起工作。

最后,在第 6 章,工作流。本章涵盖了更多管理窗口、面板和会话,并向你展示如何使用 tmux 更进一步地高效工作。

你需要什么

要使用 tmux,你需要有一台运行 Mac OS X 或 UNIX/Linux 操作系统的计算机。 不幸的是,tmux 不支持 Windows 系统,但 tmux 在 Linux 系统的虚拟机、VPS 或共享主机环境中依然可以良好运行。

尽管不是必须的,使用文本编辑器例如 Vim 或 Emacs 的经验将会对学习使用 tmux 非常有帮助。tmux 的工作机制和它们类似,而且 tmux 有一些预定义的键盘快捷键会让使用过这些编辑器的读者们感到熟悉。

约定

tmux 是一个由键盘驱动的工具。你会在本书中遇到大量的键盘快捷键。由于 tmux 提供了大小写敏感的键盘快捷键,因此你可能会对本书中提到的快捷键感到理解不是很清晰。

为了尽可能地简洁,下面是本书中所使用的一些约定。

  • CTRL- b 表示“同时按下 CTRL 键和 b 键”。
  • CTRL- R 表示“同时按下 CTRL 键和 R 键(大写 R,你可能需要同时按下 SHIFT 键和 r 键,我不会在这些按键中特别说明需要按下 SHIFT 键)”。
  • CTRL- b d 表示“同时按下 CONTROL 键和 b 键,然后松开它们,然后再按下 d 键”。在第 1 章,基础知识,你会学习关于命令前缀(command prefix),使用命令前缀,CTRL- b d 可以表示为 PREFIX d
  • 最后,我会在本书中展示一些终端命令,比如:
$ tmux new-session

美元符号只是终端会话的提示符,在终端输入命令时并不需要输入这个符号。

在线资源

本书的网站是一个交互式的论坛,同时你也可以在上面反馈本书的错误之处。网站上有本书中所建立的配置文件和脚本文件,你可以在网站上直接下载这些源代码。

使用 tmux 让我工作效率大增,我也很高兴能和大家分享我得经验。让我们开始吧,我们先来安装 tmux,了解它的基本特性。