tmux简介

tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen.

上面的描述来自tmux的manual page (man tmux)。简单地说,tmux是一个可以在一个窗口里管理多个terminals的工具。

(环境:OS X 10.11.4, tmux 2.2,iTerm2 3.0.2)

为什么用tmux

  • 窗口管理
    比如做Ruby on Rails项目时,你可能需要一个终端窗口(不管是terminal window还是terminal tab)打开vim编辑源码, 一个窗口打开sqlite3查询数据库,一个窗口看本地server的log或者通过byebug来debug,一个窗口用来输入git、rake之类的命令。 用tmux就可以在一个“screen”内同时管理这些terminal,而不用开五个terminal窗口互相切换。
  • 远程工作
    通过ssh登录到远程主机上工作。通过tmux,你可以在断开ssh连接时,保留工作现场不丢失。
  • 上下文切换
    假如同时工作在两个不同类型的项目上,通过tmux可以用两个不同的tmux session来管理这两个项目的窗口。 通过切换session,可以很方便地切换到不同项目的工作现场。
tmux snapshot

安装

$ brew install tmux

基本概念

一个session管理着一个或者多个terminal。一般来说,不同的项目、不同的工作主题等对应着不同的tmux session。 这样通过session就可以很方便地切换“工作环境”。一个session可以有一个或者多个window。 window可以进一步分成不同的pane。在一个时刻,整个“屏幕”只会被一个window占用。pane就是“屏幕”上的一块长方形区域。

tmux是基于server-client的。session信息放在server端,client连上server后可以显示、操作session。

基本使用

tmux后可以接一个命令,比如新建一个session的命令是new-session

$ tmux new-session -s session-name
$ tmux new -s session-name          # new是new-session的别名

输入命令的时候,可以不用输入完整的命令,可以只输入命令的开头几个字母,只要没有歧义就行(详见man tmux)。 如果输入有歧义,tmux也会提示你,

$ tmux n
ambiguous command: n, could be: new-session, new-window, next-window

常用的命令,

$ tmux                    # 新建一个session

$ tmux ls                 # 列出所有的session

$ tmux attach -t 0        # 连接到tmux ls列出的第0个session
$ tmux a -t session-name  # 连接到名字叫session-name的session
$ tmux a                  # 连接到第一个可用的session

$ tmux source-file ~/.tmux.conf # 执行文件里的命令
$ tmux list-commands            # 列出所有命令;别名是lscm

连上session后,client可以输入命令来控制tmux。 输入命令时,先敲prefix key(默认是C-b,就是Ctrl+b),然后跟命令对应的键。 比如想要水平分割当前的pane,先输入C-b,再输入"

man tmux里有命令和它们对应的键的详细列表(也可以通过C-b+?来显示这个列表)。 常用的命令和他们对应的键,

?     列出所有命令的键

%     垂直分割当前pane
"     水平分割当前pane
z     让当前pane最大化;再按一次退出最大化
x     关闭当前pane;(也可以直接输入exit或者Ctrl+d)
方向键 pane见的导航
C-o   旋转当前window中的panes

c     新建window
,     重命名window,window的名字默认是当前pane的当前命令的名字,见manual的"NAMES AND TITLES"
p     显示前一个window
n     显示后一个
0-9   显示指定window
w     列出所有window
&     关闭当前window

d     断开当前session
D     断开前选择session
s     选择一个session来连接
$     重命名当前session
(     让client连接到前一个session
)     让client连接到后一个session

:     Enter the tmux command prompt.

配置

tmux是可配置的。一般把配置信息放在~/.tmux.conf文件里。 可以根据自己的需求,慢慢地增加/修改配置信息;不用一开始就从网上拷贝一份很复制的配置。

开启鼠标模式,在配置文件里加上下面的配置,然后source-file一下,

set -g mouse on

打开鼠标可以通过鼠标来选择pane,调整pane的大小,也可以方便地在pane里滚动。

选择文字、拷贝和粘贴

按住option键(Linux上是shift键),然后用鼠标左键选择文字(也可双击鼠标来选择文字);选中的同时文字也会被拷贝。 按住option键,再按鼠标右键复制。

其它

电脑重启后,所有的session都会丢失,tmux-resurrect这个工具可以保存session。

OS X可以考虑使用iTerm2来代替自带的“终端”程序。iTerm2和tmux有着更好的集成。

man tmux里有详细的帮助文档,有时间可以看一看。

2016-07-05 19:36
推荐到豆瓣

如果你觉得这篇文章对你有用,可以微信扫一扫表示🙏 / If you find this post is useful to you, buy me 🍶 via Wechat