tmux简洁教程

tmux主要的功能有两点:

  • 终端利用,可以在一个terminal开启多个shell的session,这样就不需要vim一个terminal,命令又要需要一个,其他服务还要再开一个了。
  • 断线保证任务在后台继续执行,以及当你上线后保证原来打开的多个窗口与断线之前完全一样。以后就不用再使用screen了

两个功能都非常棒,值得花点时间学习,分分钟就能掌握基本应用。
tmux中有三个最基本的概念: 会话(session)、窗口(window)、窗格(Pane)
当开启tmux后,它首先会创建一个会话,在会话中会首先创建一个窗口,窗口中会创建一个面板,一个面板就可以当成一个我们可以使用的shell窗口。
下面会混用窗格和面板,都指pane

tmux使用C/S模型,主要包含以下模块:

  • server服务器。输入tmux命令时就开启了一个服务器。
  • session会话。一个服务器可以包含多个会话
  • window窗口。一个会话可以包含多个窗口。
  • pane面板。一个窗口可以包含多个面板。

基本应用

启动tmux
安装后在命令行输入tmux就启动了,看到只有一个窗口,窗口下方会有基本状态信息。
tmux的使用可以完全靠快捷键,快捷键以前缀快捷键+快捷键构成,默认的前缀(prefix)快捷键是ctrl-b,用法是按下Ctrl-b,放开后再按下相应的快键即可,例如查看tmux会话的快捷键是s,可以按下ctrl-b,放开再按s,即可查看当前的所有会话。
知道怎么按快捷键也就会有tmux了,下面试一下纵向分隔窗口的快捷键:

1
prefix %

横向分隔窗口:

1
prefix "

窗口间切换prefix <相应方向键>
这样你就可以在一个terminal中即开多个vim,又进行其他操作了。
希望这些切换可以像vim的快捷键一样?看后面的配置

退出或关闭tmux
当要退出tmux时可以使用exit,这样会关闭当前的tmux面板,当所有面板关闭时也就退出了窗口。
如果要让它在后台运行,你要先回到普通的terminal,使用快捷键prefix &
想再回来,比如断线重连时,可以使用tmux attach,或者直接tmux a,可以可看其常用命令获取更多内容。
要关闭整个tmux服务的话使用tmux kill-server
查看版本:tmux -V

会话相关命令
tmux new -s [session_name] 创新新会话
tmux new -s [session_name] -d 在后台建立会话
tmux ls 列出会话
tmux attach -t [session_name] 进入某个会话
或者在tmux中使用命令prefix :new-session新一个会话

复制面板中的内容

  • prefix [ 进入复制模式
  • space 开始复制,移动光标选择复制区域
  • Enter 复制并退出复制模式。
  • 将光标移动到指定位置,按 prefix ] 粘贴

常用快捷键

注意窗格是指Pane,窗口是指window

  • C-b ? 显示快捷键帮助
  • C-b : 进入命令模式
  • C-b C-z 挂起会话,不影响其他命令的运行
  • C-b C-o 调换窗格位置,类似与vim 里的C-w
  • C-b 空格键 采用下一个内置布局
  • C-b ! 把当前窗格(pane)变为新窗口(window)
  • C-b " 横向分隔窗格
  • C-b % 纵向分隔窗格
  • C-b q 显示分隔窗格的编号
  • C-b o 跳到下一个分隔窗格
  • C-b 上下键 上一个及下一个分隔窗格
  • C-b C-方向键 调整分隔窗格大小,注意C表示Ctrl键
  • C-b z 最大化当前窗格,再一次则恢复
  • C-b c 创建新窗口
  • C-b 0~9 选择几号窗口
  • C-b n 选择下一个窗口
  • C-b p 选择前一个窗口
  • C-b l 切换到前一个窗口,该快捷键通常会被重定义为符合vim下的空格切换
  • C-b w 以菜单方式显示及选择窗口
  • C-b s 以菜单方式显示和选择会话
  • C-b t 显示时钟
  • C-b ; 切换到最后一个使用的面板
  • C-b x 关闭面板
  • C-b & 关闭窗口
  • C-b d 退出tumx,并保存当前会话,这时,tmux仍在后台运行,可以通过tmux attach进入 到指定的会话

tmux中很多需要移动光标的地方都支持vim的i,j,k,h,可以自行试试

配置

为了让tmux更加好用,就像vim一样,我们需要进行一些个性化的配置。tmux的系统级配置文件在/etc/tmux.conf,用户级配置文件可以放在~/.tmux.conf
下面给出一份我自己在使用的,主要是针对vim的使用习惯进行了一些键绑定,增加了2个插件,功能内容都有注释:

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
37
38
39
40
41
42
43
# rebind prefix key
unbind C-b
set -g prefix C-x

# bind a reload key for tmux configure
bind r source-file ~/.tmux.conf \; display "Config reloaded.."

# Use vim keybindings in copy mode
setw -g mode-keys vi

# Select text like vim
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
bind -t vi-copy 'Space' halfpage-down
bind -t vi-copy 'Bspace' halfpage-up

# Switch pane use vi key bind
bind-key k select-pane -U # up
bind-key j select-pane -D # down
bind-key h select-pane -L # left
bind-key l select-pane -R # right

# Adjust pane by mouse
set -g mouse on

# plugin
# Tmux Plugin Manager
# git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
set -g @plugin 'tmux-plugins/tpm'

# basic tmux settings everyone can agree on
set -g @plugin 'tmux-plugins/tmux-sensible'

# Persists tmux environment across system restarts.
run-shell ~/.tmux/tmux-resurrect/resurrect.tmux
set -g @plugin 'tmux-plugins/tmux-resurrect'

# Continuous saving of tmux environment. Automatic restore when tmux is started. Automatic tmux start when computer is turned on.
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-save-interval '60'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

修改完配置文件之后可以在tmux中按快捷键Ctrl-b :进入命令模式,输入source-file ~/.tmux.conf,使其生效。经过上述配置文件之后,以后修改完配置文件直接使用Ctrl-b r就可以重新加载新配置文件了。
如果是在terminal中,使用命令tmux source-file ~/.tmux.conf使配置生效。

插件

这里主要推荐4个插件,确切来说是2组。
tpm
用于管理tmux插件,类似与vim下的vundle
地址:https://github.com/tmux-plugins/tpm

tmux-sensible
一些tmux的基本配置,适合几乎所有人,可以看一下它的配置内容
地址:https://github.com/tmux-plugins/tmux-sensible

tmux-resurrect
用户保存和恢复tmux的运行环境,非常好用,当你需要对当前你打开的tmux的会话、窗口、空格以及其位置保存时,直接按快捷键prefix Ctrl-s即可保存,需要恢复时是prefix Ctrl-r
地址:https://github.com/tmux-plugins/tmux-resurrect

tmux-continuum
可以用于配合tmux-recurrect,它会自动化地帮你保存和恢复
地址:https://github.com/tmux-plugins/tmux-continuum

其他问题

会话的命令行操作

命令 功能
tmux ls # 显示所有会话
tmux new -s <session-name> #新建会话,并指定会话名
tmux new # 新建会话,会话名自动为数字序号
tmux a # 接入上一个会话
tmux a -t <session-name> # 接入指定会话
tmux detach # 断开当前会话,等价于ctrl+b d
tmux kill-session -t <session-name> # 关闭指定会话
tmux kill-session -a -t <session-name> #关闭除指定会话外的其他所有会话
tmux kill-server # 销毁所有会话并停止tmux

参考

  1. tmux使用及个性化配置
  2. [StackOverFlow]
  3. [man tmux]