Tmux 速成教程:技巧和调整

Tmux 速成教程:技巧和调整

简介

有些开发者常常要使用终端控制台工做,致使最终打开了过多的标签页。若是你也是他们当中的一员,或者你正在实践结对编程,那么我推荐你读一读这篇文章。从上个月开始,我开始大量使用 Tmux 而且发现 Tmux 很是实用,因此我想应该写一篇文章,与诸位分享一些有关使用 Tmux 的建议和专业方案。本文将先介绍 Tmux 是什么,而后讲解如何使用 Tmux,才能使其同 Vim 结合起来,打造出更高效、更优雅的终端工具。github

本文将会包含如下内容:shell

  • Tmux 的基础
  • Tmux 中最棒的功能
    • 窗口(Window)
    • 窗格(Pane)
    • 会话(Session)
    • 快速在文本间移动光标或复制文本
    • 很是轻巧的结对编程功能
  • 调整 Tmux 以加强其同 Vim 的集成度
    • 调整背景的配色方案
    • 调整光标的形状
    • 调整粘贴时的文本缩进
  • 其余可以提高 Tmux 体验的工具或技巧
    • 用 Tmuxinator 自动建立会话
    • 改变 Tmux 状态栏的颜色

请注意,在撰写本文的过程当中,我安装了如下这一组软件,并在测试时使用了这些版本:编程

  • Tmux 1.9a
  • Vim 7.4
  • iTerm 2.1
  • Mac OS (Mavericks and Yosemite)

让咱们开始吧!vim

基础知识

什么是Tmux?

Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话。不只如此,你还能够经过 Tmux 使终端会话运行于后台或是按需接入、断开会话,这个功能很是实用。稍后,咱们将会看到如何充分地利用这个功能。windows

如图所示,这就一个是 Tmux 的会话:ruby

从图中咱们能够看出:bash

  • 左侧:Vim
  • 右侧:系统 Shell
  • 左下方:Tmux 会话的名字(“pomodoro-app”)
  • 下方的中部:当前会话中的 Tmux 窗口(“app log”、“editor”和 “shell”)
  • 右下方:当前的日期

如何安装 Tmux?

在 Mac OS 中安装:

  • 安装 Homebrew

有关安装 homebrew 的详细的信息能够参考这里服务器

  • 安装 Tmux

在 Ubuntu 中安装:

在终端输入以下命令:session

 

Tmux 的快捷键前缀(Prefix)

为了使自身的快捷键和其余软件的快捷键互不干扰,Tmux 提供了一个快捷键前缀。当想要使用快捷键时,须要先按下快捷键前缀,而后再按下快捷键。Tmux 所使用的快捷键前缀默认是组合键 Ctrl-b(同时按下 Ctrl 键和 b 键)。例如,假如你想经过快捷键列出当前 Tmux 中的会话(对应的快捷键是 s),那么你只须要作如下几步:

  • 按下组合键 Ctrl-b (Tmux 快捷键前缀)
  • 放开组合键 Ctrl-b
  • 按下 s 键

这里有一些小建议:

首先我建议对调 Ctrl 键和 Caps-Lock 键的功能。

经过按下 Caps-Lock 键来代替 Ctrl 键将会很是实用。由于在编码过程当中,你须要频繁地按下 Ctrl 键,而因为 Caps-Lock 与手指在键盘的起始位置处于同一直线,因此按下 Caps-Lock 键会更加容易、便捷。

其次,我建议将 Tmux 的快捷键前缀变为 Ctrl - a。用 Caps-Lock 键替代了 Ctrl 键以后,因为 Caps-Lock 键与 a 键离得更近,因此按下 Ctrl - a 就将会比按下 Ctrl - b 更容易、更便捷。

若要将快捷键前缀变动为 Ctrl-a ,请将如下配置加入到 Tmux 的配置文件 ~/.tmux.conf 中:

 

Tmux 的配置文件

每当开启一个新的会话时,Tmux 都会先读取 ~/.tmux.conf 这个文件。该文件中存放的就是对 Tmux 的配置。

小提示:若是你但愿新的配置项可以当即生效,那么你能够将下面这一行配置加入到文件 ~/.tmux.conf 中。

这样配置了以后,每当向 ~/.tmux.conf 文件中添加了新的配置,只须要按下 Ctrl-b r 就能够从新加载配置并使新的配置生效,从而免去了开启一个新的会话。

Tmux 中最棒的功能

提示:下面这截图也许与你使用 Tmux 时看到的界面略有不一样。这是由于我修改了 Tmux 的状态栏配置,若是你也想修改为和截图中同样的效果,那么能够参照“美化 Tmux 的状态栏”这一节中的步骤。

窗格

我认为沿竖直方向分割屏幕是个不错的主意,这样我就能够在一边使用 Vim,而在另外一边查看代码运行结果,若是须要的话,有时我还会再打开一个控制台。下面我就要讲解如何利用 Tmux 实现这一切。

从图中能够看出:

  • 左侧:Vim(左上方是一个 Ruby 的类文件,左下方是针对这类编写的测试文件)
  • 右侧:一个 Bash 的会话

要建立一个竖直放置的窗格很容易,待开启了一个 Tmux 会话以后,只需再按下 Ctrl-b % ,一个竖直窗格就出现了。另外,若要把屏幕沿水平方向分割,则只须要按下 Ctrl-b "。在 Tmux 的窗格间移动光标也很简单,只须要先按下 Tmux 的快捷键前缀,而后再按下对应的方向键就可让光标进入到目标窗格了。

窗口

在Tmux中,窗口是个窗格容器,你能够将多个窗格放置在窗口中,并根据你的实际须要在窗口中排列多个窗格,也是彻底取决于你的须要。例如,我常常是这样作,先开启一个叫做“server”的窗口用于运行应用程序的服务器(在这个窗口中能够看到服务器的日志),而后开启另外一个叫做“editor”的窗口用于编写代码。在这个窗口中有两个窗格,一个用于 Vim,一个用于运行测试代码。最后再开启一个叫做“shell”的窗口用于经过 Bash shell 运行命令。Tmux 的窗口功能很是实用,由于在一个窗口中能够建立出多个窗格,这样在一个窗口中就能同时查看全部窗格内容,经过这种方法能够高效地利用有限的屏幕空间。

在 Tmux 的会话中,现有的窗口将会列在屏幕下方。下图所示的就是在默认状况下 Tmux 列出现有窗口的方式。这里一共有三个窗口,分别是“server”、“editor”和“shell”。

若要建立一个窗口,只须要按下Ctrl-b c;若要切换窗口,只须要先按下Ctrl-b,而后再按下想切换的窗口所对应的数字,该数字会紧挨着窗口的名字显示。

会话

一个 Tmux 会话中能够包含多个窗口。会话功能很是简单易用,例如能够为一个特定的项目建立一个专用的 Tmux 会话。若要建立一个新的会话,只须要在终端运行以下的命令:

假设我还须要开发另外一个项目,因而我就会为此再新建一个会话。虽然进入了新的会话,可是原来的会话并无消失。因此我能够在稍后回到以前的会话继续工做。若要建立一个新的会话,只须要按下 Ctrl-b : ,而后输入以下的命令:

除非显式地关闭会话,不然 Tmux 的会话在重启计算机以前都不会消失。只要尚未重启计算机,你均可以自由地从一个项目的会话跳转到另外一个。

在 Tmux 的会话间切换

若要获取现有会话的列表,能够按下Ctrl-b s。下图所示的就是会话的列表:

列表中的每一个会话都有一个 ID,该 ID 是从 0 开始的。按下对应的 ID 就能够进入会话。若是你已经建立了一个或多个会话,可是尚未运行 Tmux,那么能够输入以下命令以接入已开启的会话。

 

在文本间快速移动光标,复制文本

在 iTerm2 中,要想快速地复制内容就不得不键盘和鼠标一块儿用,这一点我一直很不喜欢。我想必定会有不须要使用鼠标且更快捷的复制方法。幸运的是,Tmux就提供了只用键盘就能够完成复制的功能,这源于 Tmux 是从命令行启动的,而在命令行界面是没法使用鼠标的。

在文本间移动光标

在 Tmux 中可使用与 Vim 极为类似的方式在文本间移动光标。正如你熟知的那样,用 k 键能够将光标移动到上一行,用 w 键能够向后移动一个单词等等。并且还能够经过把 Tmux 设为 vi 模式,使其与 Vim 的操做更加接近。为此,须要将如下配置加入到文件 ~/.tmux.conf 中。

 

将复制下来的文本发送到系统的剪贴板中

在默认状况下,当从 Tmux 中复制文本时,复制下来的文本只能粘贴到同一个 Tmux 会话中。若要使复制下来的文本能够粘贴到任何位置,就须要让 Tmux 将文本复制到系统的剪贴板。为此,咱们须要这样作:

安装 retach-to-user-namespace。用 brew 安装的话将会很是简单,只须要运行下面这条命令:

在配置文件 ~/.tmux.conf 中加入如下内容:

 

Select and copy text

既然已经设置成了 vi 模式,也安装了 rettach-to-user-namespace,下面就让咱们来看看如何从 Tmux 的会话中复制文本吧。假设要复制的是 IP 地址,因而咱们先运行了 ifconfig 命令。接下来就请跟随如下的步骤:

首先按下 Ctrl-b [ 进入复制模式,而后能够看到一小段高亮的文本出如今了屏幕的右上角 (“[0/0]”)(以下图所示)。

接下来就能够像在 Vim 中同样用 jkl 和 h 等键在文本间移动光标了。

把光标移动到想复制的文本上后再按下空格键就能够开始选择文本了(这和在 Vim 中复制文本的步骤如出一辙)。

选择完要复制的文本后再按下回车键。

这样 IP 地址就复制下来并能够粘贴到任何地方了。

让复制文本的操做更像 Vim

你还能够设置 Tmux 使用 v 键选择文本,用 y 键复制文本。为此只须要将下面的配置项加入到配置文件 ~/.tmux.conf 中。

 

高效的结对编程

你能够将 Tmux 会话的地址分享给他人,这样他们就能够经过 SSH 接入这个会话了。因为会话是创建在 SSH 之上的,因此不会产生额外的开销。经过使用高速的互联网,对于那些链接到远程会话上的用户而言,他们会以为这个会话就是运行在本地的。

在Tmux 中使用 Tmate

Tmate 是一个 Tmux 的管理工具,使用它不但可以轻松地建立 Tmux 会话并且还可以经过互联网把该会话共享给其余人。若要使用 Tmate 共享 Tmux 会话,请按照如下步骤操做:

  • 安装 Homebrew
  • 安装 Tmate
  • 使用 Tmate 开启一个新的会话
  • 从 Tmux 的会话中复制由 Tmate 产生的 SSH URL。以下图所示,请注意屏幕下方的信息“[tmate] Remote session: ssh …”:

  • 利用刚刚复制下来的 URL 就能够邀请其余人经过 SSH 访问你的会话了。

了解了如何利用 Tmux 的结对编程功能以后,还能够再利用您所喜好的运营商提供的语音服务进一步增强会话交互性。

调整 Tmux 以加强其同 Vim 的集成度

调整背景的配色方案

当我第一次经过 Tmux 打开 Vim 时,我发现 Vim 的颜色没有正确显示。正以下图所示,只有有字符的地方才有背景色。

这个问题是由于经过 Tmux 运行 Vim 须要配置一个特殊的终端参数(term parameter)。请将下面这行配置添加以你的 ~/.vim 文件中。

在更新了配置文件 ~/.vimrc 之后,颜色应该就能够正确显示了。

调整光标的形状

在默认状况下,当经过 Tmux 运行 Vim 时,不管当前 Vim 是处于插入模式、可视模式仍是其余模式,光标的形状都是同样的。这样就很难判断当前的 Vim 模式是什么。若要避免这个问题,就须要让 Tmux 通知 iTerm 更新光标的形状。为此,须要将如下配置加入到文件 ~/.vimrc 中。

在这里我要感谢 Andy Fowler,是他最早分享了调整光标的形状这个技巧

调整粘贴时的文本缩进

在 Vim 中粘贴文本时可能会遇到这样的问题,有时文本的缩进会发生变化,特别是在粘贴大量的文本时,这个问题会更加明显。虽然能够经过在粘贴前执行 :set nopaste 来解决这个问题,可是这里还有一种更好的解决方法。就是把下面这段配置加入到配置文件 ~/.vimrc 中,这样 Vim 就会自动地阻止粘贴文本时的自动缩进。

在这里我要感谢 Marcin Kulik,是他最早分享了这个技巧

其余可以提高 Tmux 体验的工具或技巧

Tmuxinator (为项目自动建立会话)

假设你正在开发应用程序 A。在开发过程当中,常常要建立 Tmux 会话,会话中包含“server”、“editor”(用于编写代码)和“shell”(用于运行系统命令)这 3 个窗口。不只如此,在一天之中的某个特定的时间你还须要临时进入到应用程序 B 的开发工做中。因而你又不得不建立另外一个会话,虽然有略微的不一样(好比目录和某些命令),可是会话中仍是要包含应用程序 A 中的那 3 个窗口。可是有了 Tmuxinator,你就能够为每一个Tmux 会话声明一个配置,而后用 1 条命令就能建立出这个会话了。这功能太棒了,不是吗。

Tmuxinator 是一个 Ruby 的 gem 包,可用于建立 Tmux 的会话。它的工做方式是先在配置文件中定义会话中的细节,而后用 1 条命令建立出这些会话。下面就让咱们看看如何安装 Tmuxinator 以及如何添加配置来为指定项目开启一个会话。能够经过运行以下命令安装 Tmuxinator 的 gem 包。

安装好了 Tmuxinator 之后,就能够在系统 Shell 中运行 tmuxinator 或 mux 命令了。下面就让咱们为上述的应用程序(有 3 个窗口,分别是“servers”, “editor” 和 “shell”)来建立一个配置文件吧。下面这条命令的做用是为这个项目建立并打开一个配置文件。

按下回车键后,就会自动打开文件 ~/.tmuxinator/project_a.yml。为了实现项目 A 所需的配置,你须要把 project_a.yml 的内容更新为:

一旦将上面的配置添加到了项目 A 的 Yaml 文件中,只须要运行下面这条命令就能够启动 Tmux 的会话了。

固然若是愿意的话,你也可使用 Tmuxinator 命令的别名:

大功告成了。如今,每当想进入项目 A 的编码工做时,就只须要运行 Tmuxinator 命令。

能够到这里查看Tmuxinator的官方文档。

美化 Tmux 的状态栏

默认状况下,Tmux的状态栏看起来是下图这个样子(图中绿底部分):

咱们能够根据须要改变状态栏的外观。对我来讲,我喜欢下图这种清爽的外观。

为了达到上图的效果,我将以下的配置加入到了配置文件 ~/.tmux.conf 中。

 

总结

在这篇文章中咱们先介绍了 Tmux 的基本功能,而后介绍了 Tmux 中最棒的几个功能。这以后介绍了一些配置以及几个可以提高 Tmux 体验的工具。至此,诸位对 Tmux 的印象如何呢?大家是否也发现了什么其余有用的功能或配置?若是有的话欢迎留言告诉咱们。

感谢您阅读本文!

TN.(应该是做者的名字吧)

相关文章
相关标签/搜索