tmux 配置

tmux 是一个优秀的终端复用器类软件。用户可以通过 tmux 在一个终端内管理多个分离的会话,窗口及面板,对于同时使用多个命令行,或多个任务时非常方便。同时 tmux 可以保存会话的 session,方便了 SSH 连接工作状态的保存恢复。

使用

tmux 采用 client/server 模型,主要由以下模块组成:

模块 简介
server 服务。tmux 运行的基础服务,以下模块均依赖此服务。
session 会话。一个服务可以包含多个会话。
window 窗口。一个会话可以包含多个窗口。
panel 面板。一个窗口可以包含多个面板。

执行 tmux 命令时就开启了一个服务并创建了一个会话,窗口和面板。

终端指令

功能 指令 简写
启动服务 tmux
启动服务并指定会话名和窗口名 tmux new-session -s 会话名 -n 窗口名 tmux new
恢复会话至最近使用会话 tmux attach-session tmux a
恢复会话至指定会话 tmux a -t 目标会话
列出所有会话 tmux list-sessions tmux ls
关闭指定会话 tmux kill-session -t 目标会话
关闭所有服务 tmux kill-server

tmux 简写指令只要简写到没有其他歧义项即可。如 tmux attach-session 可简写 tmux attach 甚至 tmux attmux a 。另外通过输入指令时用 Tab 键查看可能简写,比如输入 tmux new 后按 Tab 键提示:

1
2
new-session  new   -- Create a new session
new-window neww -- Create a new window

tmux 内指令

tmux 中执行指令需要先按下前缀键,默认 Ctrl-b 然后按下相应键位执行指令。下面指令均省略前缀键。

会话

功能 指令
创建新会话 :new<回车>
列出所有会话 s
重命名当前会话 $
退出会话(后台仍有服务,可通过 tmux a 恢复会话) d

窗口

功能 指令
创建新窗口 c
列出所有窗口 w
跳转至下一个窗口 n
跳转至上一个窗口 p
查找窗口 f
重命名当前窗口 ,
关闭当前窗口 &

面板

功能 指令
垂直分割当前面板并创建新面板 %
水平分割当前面板并创建新面板 "
切换至下一面板 o
将下一面板换至当前位置 Ctrl-o
显示面板号,输入对应数字可切换 q
关闭当前面板 x
切换面板布局 空格
将当前面板左移 {
将当前面板右移 }
将当前面板最大化,再次使用还原 z

同步面板

该指令可以同步当前窗口内所有面板,重复执行将会在开关模式循环切换。

1
:setw synchronize-panes

synchronize-panes

复制模式

前缀 + [ 进入复制模式后,可以复制文字等。tmux 复制模式默认移动为 emacs 风格,也可以在 tmux 配置文件中设置为 vi 风格。通过复制模式的快捷键可以进行快捷的选词等操作,甚至可以通过插件来打开文件。

在 tmux 复制模式中使用 vi 风格,在 ~/.tmux.conf 添加配置项 setw -g mode-keys vi 即可。

下面为复制模式的快捷键:

功能 vi emacs
开始选择 空格 Ctrl-空格
清除选择内容 ESC Ctrl-g
复制选择内容 回车 M-w
退出复制模式 q ESC
光标左移 h Left
光标右移 l Right
光标下移 j Down
光标上移 k Up
光标移至首行 H M-R
光标移至中间行 M M-r
光标移至尾行 L
移至行首 0 Ctrl-a
移至行尾 $ Ctrl-e
下一个词 w M-f
上一个词 b M-b
下一页 Ctrl-f Page Down
上一页 Ctrl-b Page Up
向下滚动半屏 Ctrl-d M-Down
向上滚动半屏 Ctrl-u M-Up
向下翻 J Ctrl-Down
向上翻 K Ctrl-Up
向后搜索 / Ctrl-s
向前搜索 ? Ctrl-r
继续搜索 n n

其他

功能 指令
面板中显示数字时钟 t
列出所有快捷键 ?
进入命令模式 :

配置文件

tmux 读取个人配置文件默认在目录 ~/.tmux.conf 。一般安装完 tmux 后需要手动在主目录下创建 .tmux.conf 文件。这里建议修改前缀键为 Ctrl-a,并将 大写锁定键 修改为 Ctrl ,macOS 下可在 系统偏好设置 - 键盘 - 修饰键 中选择指定键盘并更改 大写锁定键 的映射。配置文件中按键均需要先按下前缀键后再按相应按键才能执行对应绑定。常用配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 修改默认前缀键为 Ctrl-a 并取消原前缀键
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# 复制模式使用 vi 键位
setw -g mode-keys vi

# 窗口和面板索引从 1 开始
set -g base-index 1
set -g pane-base-index 1

# 启动鼠标支持
set-option -g mouse on

# 分割面板并创建新面板并设置面板 SHELL 路径为当前面板 SHELL 路径
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# 使用 vi 风格进行面板间移动
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 设置面板大小(-r 参数指按键指令可重复 即 前缀-指令-指令-指令 可实现重复操作)
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

# 窗口间移动
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

# 刷新 .tmux.conf 配置并提示
bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"

插件

tmux 已经可以实现很多操作了,但是仍然有一定局限性,下面介绍一些常用插件。

tpm

tmux 插件管理工具。

安装:

1
$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

配置文件 ~/.tmux.conf 底部添加:

1
2
3
4
5
# 插件列表
set -g @plugin 'tmux-plugins/tpm'

# 初始化 tpm ,需要在放在 .tmux.conf 文件底部
run '~/.tmux/plugins/tpm/tpm'

快捷键:

功能 指令
安装插件 Shift-i
升级插件 Shift-u
卸载插件 ALT-u

重新载入 tmux 配置后,安装按下 前缀键-I 即可完成 tpm 的安装,以后安装其他插件只要在插件列表下添加并进行安装操作即可。

tmux-resurrect

保存 tmux 状态的插件,可以在 tmux server 关闭后进行 tmux 的状态恢复,方便重启等情况 tmux 的状态恢复。同时可以安装自动保存 tmux 状态的插件 tmux-continuum,该插件 15 分钟自动保存一次 tmux 状态。

插件列表添加:

1
2
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'

快捷键:

功能 指令
保存 tmux 状态 Ctrl-s
恢复 tmux 状态 Ctrl-r

tmux-continuum 可以自动在启动 tmux 服务时恢复上一次状态。需在 ~/.tmux.conf 配置:

1
set -g @continuum-restore 'on'

tmux-open

在 tmux 打开选中文件或网址的插件,需要在 tmux 复制模式下选中。

插件列表添加:

1
set -g @plugin 'tmux-plugins/tmux-open'

快捷键:

功能 指令
打开选中文件使用系统默认软件 o
打开选中文件使用终端编辑器 Ctrl-o
使用搜索引擎搜索选中内容 Shift-s

使用搜索引擎搜索需要在 ~/.tmux.conf 中配置:

1
set -g @open-S 'https://www.google.com/search?q='

如上是使用谷歌搜索,S 指定了复制模式下的快捷键。具体可查看 tmux-open 说明。

vim-tmux-navigator

支持在 vim 中通过快捷键进行 tmux 面板的跳转,下面快捷键需要在 vim 中使用。

安装:

  1. vim 中添加 christoomey/vim-tmux-navigator 插件。
  2. tmux 插件列表添加 set -g @plugin 'christoomey/vim-tmux-navigator'

快捷键:

功能 指令
跳转至左侧面板 Ctrl-h
跳转至右侧面板 Ctrl-l
跳转至下方面板 Ctrl-j
跳转至上方面板 Ctrl-k
跳转至前一个面板 Ctrl-\

参考资料: