Yi's Blog

思绪来得快,去得也快

Tmux 快速教程

翻译的文章:A Tmux Crash Course

译文

我已经使用 Tmux 近 4 个月了,它和 vim 一样成为了我工作流中不可或缺的部分。Pane 和 windows 的管理,在输出信息中可导航的复制模式以及 seesion 的管理让 Tmux 成为了命令行爱好者(特别是 vim 使用者)毫不费力就能使用的工具。我收集了一些我日常使用的 tmux 命令,这些命令让我的工作更加高效。

image-1

如果我提到的 tmux 命令不是默认的快捷键, 我会在介绍的间隙说明。

Session 管理

Seesion 可以有效地分离工作环境。我有一个“工作” session 和一个“娱乐” session;在“工作”中,我打开所有日常开发需要的内容,而在“娱乐”中,我只打开当前开源的 gem 或者在家 hack 的一些东西。

  • tmux new -s session_name <p>创建一个叫做 session_name 的 tmux session</p>
  • tmux attach -t session_name <p> 重新开启叫做 session_name 的 tmux session </p>
  • tmux switch -t session_name <p>转换到叫做 session_name 的 tmux session</p>
  • tmux list-sessions <p>列出现有的所有 session </p>
  • tmux detach (prefix + d) <p>离开当前开启的 session</p>

Windows

Tmux 有一个含有标签的界面,但是它命名这些标签为 “Windows”。为了保持有序,我重新命名了所有我使用的 windows;如果我正在编写一个 gem,我会使用这个 gem 的名字来命名 window。客户端的应用程序也一样。这样,我就能通过名字而不是运行的程序找到相应的 window。

  • tmux new-window (perfix + c) <p> 创建一个新的 window </p>
  • tmux select-window -t :0-9 (perfix + 0-9) <p>根据索引转到该 window</p>
  • tmux rename-window (perfix + ,)<p>重命名当前 window</p>

Panes

Panes 让我的开发时间从平淡变为棒极了。它们也是我卸载 MacVim 并且单独使用 iTem2 开发的原因。我无须切换应用程序以变换上下文(编辑,浏览 log,使用IRB,等)。任何我想做的事情,我可以在一个终端中完成。有人认为 OS X 的 Cmd + Tab 很快,我不这么认为。

  • tmux split-window (perfix + “) <p>将 window 垂直划分为两个 pane</p>
  • tmux split-window -h (perfix + %) <p>将 window 水平划分为两个 pane</p>
  • tmux swap-pane -[UDLR] (perfix + { or }) <p>在指定的方向交换 pane</p>
  • tmux select-pane -[UDLR] <p>在指定的方向选择下一个 pane</p>
  • tmux select-pane -t :.+ <p>选择按数字顺序的下一个 pane</p>

其他有益的 TMUX 命令

  • tmux list-keys <p>列出所有可以的快捷键和其运行的 tmux 命令</p>
  • tmux list-commands <p>列出所有的 tmux 命令及其参数</p>
  • tmux info <p>流出所有的 session, window, pane, 运行的进程号,等。</p>
  • tmux source-file ~/.tmux.conf <p>重新加载当前的 tmux 配置(基于一个默认的 tmux 配置)

必须用到的几条配置

这是几个我必须用到的配置:

# remap prefix to Control + a
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# force a reload of the config file
unbind r
bind r source-file ~/.tmux.conf

# quick pane cycling
unbind ^A
bind ^A select-pane -t :.+

工作流程

在白天,我的工作包括编码一个或者两个 Rails 应用,修改我的 dotfiles,运行 irssi,还有可能在另一个窗口打开一个 vim 来做笔记。如我提到的,我会运行所有这些在一个 tmux 的 session 中, 并且在不同的 windows 中来回切换。

特别是当我在做 Rails 工作时,我必须用一个 75% / 25% 的垂直分割放置 vim 和一个终端,并在其中运行测试,和 git 交互,以及写代码。如果我在运行测试或者使用 ‘git diff’,我想要看到多余 25% 的输出,我会使用 tmux 来交换 pane 并切换到复制模式来查看我想查看的东西。

最后,我在全屏模式运行 iTems2。为了一个编辑器和终端而切换 OS X 的应用实在是太愚蠢了。

更多学习的链接