tmux 是一款终端复用命令行工具,通常用于 Terminal 的窗口管理。在 macOS 下,使用 iTerm2 能应付绝大多数窗口管理的需求。git
如上图所示,iTerm2 能新建多个标签页(快捷键 ⌘T),也能在同一个窗口中分割出多个窗格(快捷键 ⌘D 或 ⌘⇧D)。github
tmux 相比 iTerm2 的优点在于:shell
iTerm2 的窗格切换快捷键(⌘⌥→)容易与其余软件全局快捷键冲突(例如 Spectacle 的窗口分割快捷键),tmux 因为存在前缀快捷键,因此不存在快捷键冲突问题;vim
tmux 能够在终端软件重启后经过命令行恢复上次的 session ,而终端软件则不行;session
tmux 简洁优雅、订制性强,学会以后也能在 Linux 上使用,有助于逼格提高。工具
接下来咱们花十分钟来掌握下 tmux 的基础用法:布局
macOS 上使用 Homebrew 安装便可:优化
brew install tmux
spa
安装完成后,运行 tmux
新建一个 tmux 的会话(session),此时窗口惟一的变化是在底部会出现一个 tmux 的状态栏。咱们先按下 tmux 默认的前缀快捷键 ⌃b
将其激活为快捷键接收模式,再按下 %
,便可将当前窗口切分为左右两个窗格。命令行
通常状况下 tmux 中全部的快捷键都须要和前缀快捷键 ⌃b
来组合使用(注:⌃ 为 Mac 的 control 键),如下是经常使用的窗格(pane)快捷键列表,你们能够依次尝试下:
%
左右平分出两个窗格
"
上下平分出两个窗格
x
关闭当前窗格
{
当前窗格前移
}
当前窗格后移
;
选择上次使用的窗格
o
选择下一个窗格,也可使用上下左右方向键来选择
space
切换窗格布局,tmux 内置了五种窗格布局,也能够经过 ⌥1
至 ⌥5
来切换
z
最大化当前窗格,再次执行可恢复原来大小
q
显示全部窗格的序号,在序号出现期间按下对应的数字,便可跳转至对应的窗格
tmux 除了窗格之外,还有窗口(window) 的概念。依次使用如下快捷键来熟悉 tmux 的窗口操做:
c
新建窗口,此时当前窗口会切换至新窗口,不影响原有窗口的状态
p
切换至上一窗口
n
切换至下一窗口
w
窗口列表选择,注意 macOS 下使用 ⌃p
和 ⌃n
进行上下选择
&
关闭当前窗口
,
重命名窗口,可使用中文,重命名后能在 tmux 状态栏更快速的识别窗口 id
0
切换至 0 号窗口,使用其余数字 id 切换至对应窗口
f
根据窗口名搜索选择窗口,可模糊匹配
若是运行了屡次 tmux
$
重命名当前会话
s
选择会话列表
d
detach 当前会话,运行后将会退出 tmux 进程,返回至 shell 主进程
在 shell 主进程下运行如下命令能够操做 tmux 会话:
tmux new -s foo # 新建名称为 foo 的会话 tmux ls # 列出全部 tmux 会话 tmux a # 恢复至上一次的会话 tmux a -t foo # 恢复名称为 foo 的会话,会话默认名称为数字 tmux kill-session -t foo # 删除名称为 foo 的会话 tmux kill-server # 删除全部的会话
除以上提到的快捷键之外,tmux 还有许多其余的快捷键和命令,使用前缀快捷键 ⌃b
加 ?
能够查看全部的快捷键列表,该列表视图为 tmux copy 模式,该模式下可以使用如下快捷键(无需加 ⌃b
前缀):
⌃v
下一页
Meta v
上一页 (tmux 快捷键为 Emacs 风格,这里的 Meta 键可用 Esc 模拟)
⌃s
向前搜索
q
退出 copy 模式
tmux 默认配置中最糟糕的体验就是滚屏查看和文本复制(你们能够先试试看)。你须要先使用 ⌃b
[
快捷键进入 copy 模式,而后使用翻页、字符定位来选择须要的字符,效率远没有鼠标选择来的快。
所以 tmux 提供了一些个性化配置项来优化这些配置,首先在 shell 中运行 touch ~/.tmux.conf
新建用户配置文件。在文件中增长如下内容:
# 开启鼠标模式 set -g mode-mouse on # 容许鼠标选择窗格 set -g mouse-select-pane on # 若是喜欢给窗口自定义命名,那么须要关闭窗口的自动命名 set-option -g allow-rename off # 若是对 vim 比较熟悉,能够将 copy mode 的快捷键换成 vi 模式 set-window-option -g mode-keys vi
配置文件修改完成后,能够 tmux kill-server
重启全部 tmux 进程,或者在 tmux 会话中使用 ⌃b
:
进入控制台模式,输入 source-file ~/.tmux.conf
命令从新加载配置。
tmux 下开启鼠标滚屏后,复制文本有两种方式:
方法 1:使用 ⌃b
z
进入窗格全屏模式,鼠标选择文本的同时按住 option 键 ⌥
,而后使用 ⌘c
进行复制;
方法 2:开启 iTerm2 「在选择时复制」选项,便可实现自动选择复制。以下图:
screen 是另一款终端复用命令行,但他没有 tmux 好看好用;
tmux 有个 bug ,致使从它启动的 vscode 的复制粘贴快捷键会失效;
iTerm2 能够经过 「Preferences -> Profiles -> Keyboard Behavior -> Left option key acts as +Esc」将键盘的左侧 option 键映射为 Meta 键