Tmux 怎么用

标签: none

Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。

为什么要使用 tmux ?

  • 想同时打开多个目录不得不开很多终端标签来回切换
  • 开了一个 vim 窗口之后,想切到其他目录不得不重新打开个一个终端窗口 ssh 到服务器
  • 运行一个脚本,服务器断掉失联之后当前进程被服务器给无情地杀掉,不得不用 nohup 等方式让脚本在后台跑

Tmux 概念和使用

tmux 中有几个重要概念:

会话 (session): 建立一个 tmux 工作区会话,会话可以长期驻留,重新连接服务器不会丢失,我们只需重新 tmux attach 到之前的工作区就可以恢复会话,这样你的工作区就可以常驻服务器了,非常方便
窗口 (window): 容纳多个窗格
窗格 (pane): 可以在窗口中分成多个窗格,每个窗格都可以运行各种命令

Sessions,windows,panes.png

前缀键

Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是 Ctrl+b,即先按下 Ctrl+b ,快捷键才会生效。

如果更喜欢 Ctrl+a, 则需要将其添加到 ~/.tmux.conf

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

获得帮助

举例来说,帮助命令的快捷键是 Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下 Ctrl+b ,再按下 ? ,就会显示帮助信息。

然后,按下 ESC 键或 q 键,就可以退出帮助。

查看 tmux 版本

CentOS 7 中版本是 1.8

$ tmux -V
tmux 1.8

会话管理

新建会话

第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。

使用编号区分会话,不太直观,更好的方法是为会话起名。

$ tmux

# 新建一个指定名称的会话
$ tmux new -s <session-name>

# 启动新会话
Ctrl+b :new<回车>

列出所有会话

快捷键

  • Ctrl+b s:列出所有会话

查看当前所有的 Tmux 会话

$ tmux ls
# or
$ tmux list-session

分离会话

快捷键

  • Ctrl+b d:分离当前会话

或者输入 tmux detach 命令,就会将当前会话与窗口分离

$ tmux detach

上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。

恢复会话

tmux attach 命令用于重新接入某个已存在的会话

# 使用会话编号
$ tmux attach -t 0

# 使用会话名称
$ tmux attach -t <session-name>

# 简写
$ tmux a -t <session-name>

结束会话

tmux kill-session 命令用于杀死某个会话

# 使用会话编号
$ tmux kill-session -t 0

# 使用会话名称
$ tmux kill-session -t <session-name>

# 关闭所有会话
$ tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill

切换会话

快捷键

  • Ctrl+b (: 上一个会话
  • Ctrl+b ) :下一个会话
  • Ctrl+b L :上一次使用过的会话
  • Ctrl+b s: 从列表中选择会话

tmux switch 命令用于切换会话

# 使用会话编号
$ tmux switch -t 0

# 使用会话名称
$ tmux switch -t <session-name>

重命名会话

快捷键

  • Ctrl+b $:重命名当前会话

tmux rename-session 命令用于重命名会话。

$ tmux rename-session -t 0 <new-name>

上面命令将 0号会话重命名

窗口管理

Tmux 允许新建多个窗口(window)

新建窗口

快捷键

  • Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息

tmux new-window 命令用来创建新窗口

$ tmux new-window

# 新建一个指定名称的窗口
$ tmux new-window -n <window-name>

切换窗口

快捷键

  • Ctrl+b w:从列表中选择窗口
  • Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)
  • Ctrl+b n:切换到下一个窗口
  • Ctrl+b l:上一次使用过的窗口
  • Ctrl+b <number>:切换到指定编号的窗口,其中的 <number> 是状态栏上的窗口编号
  • Ctrl+b 0
  • Ctrl+b 9

tmux select-window 命令用来切换窗口。

# 切换到指定编号的窗口
$ tmux select-window -t <window-number>

# 切换到指定名称的窗口
$ tmux select-window -t <window-name>

重命名窗口

快捷键

  • Ctrl+b ,:窗口重命名

tmux rename-window 命令用于为当前窗口起名(或重命名)

$ tmux rename-window <new-name>

窗口快捷键

下面是一些窗口操作的快捷键

  • Ctrl+b f:查找窗口
  • Ctrl+b &:关闭当前窗口

调整窗口排序

按下 Tmux 前缀 ctrl+b,然后输入 :

swap-window -s 3 -t 1  交换 3 号和 1 号窗口
swap-window -t 1       交换当前和 1 号窗口
move-window -t 1       移动当前窗口到 1 号

窗格操作

Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。

划分窗格

快捷键

  • Ctrl+b %:划分左右两个窗格, 垂直分割
  • Ctrl+b ":划分上下两个窗格, 水平分割

tmux split-window 命令用来划分窗格

# 划分上下两个窗格
$ tmux split-window
$ tmux split-window -v

# 划分左右两个窗格
$ tmux split-window -h

移动光标

快捷键

  • Ctrl+b ↑:光标切换到上方窗格
  • Ctrl+b ↓:光标切换到下方窗格
  • Ctrl+b ←:光标切换到左边窗格
  • Ctrl+b →:光标切换到右边窗格
  • Ctrl+b ;:光标切换到上一个窗格
  • Ctrl+b o:光标切换到下一个窗格

tmux select-pane 命令用来移动光标位置

# 光标切换到上方窗格
$ tmux select-pane -U

# 光标切换到下方窗格
$ tmux select-pane -D

# 光标切换到左边窗格
$ tmux select-pane -L

# 光标切换到右边窗格
$ tmux select-pane -R

交换窗格位置

快捷键

  • Ctrl+b {:当前窗格与上一个窗格交换位置
  • Ctrl+b }:当前窗格与下一个窗格交换位置
  • Ctrl+b Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格
  • Ctrl+b Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格

tmux swap-pane 命令用来交换窗格位置

# 当前窗格上移
$ tmux swap-pane -U

# 当前窗格下移
$ tmux swap-pane -D

调整窗格尺寸

Ctrl+b :resize-pane -U              当前窗格向上扩大 1 格
Ctrl+b :resize-pane -L              当前窗格向左扩大 1 格
Ctrl+b :resize-pane -R              当前窗格向右扩大 1 格
Ctrl+b :resize-pane -D 20           当前窗格向下扩大 20 格
Ctrl+b :resize-pane -t 2 -L 20      编号为 2 的窗格向左扩大 20 格

Ctrl+b Alt+ ↑                       向上扩大窗格
Ctrl+b Alt+ ↓                       向下扩大窗格
Ctrl+b Alt+ ←                       向左扩大窗格
Ctrl+b Alt+ →                       向右扩大窗格
Ctrl+b Alt+ → → →                   连续向右扩大窗格

翻页及内容搜索

快捷键

  • Ctrl+b [:进入scrollback mode, 使用 上下方向键进行单行滚动
  • Ctrl+b PgUp:向上翻页
  • Ctrl+b PgDn:向下翻页
  • 在滚动模式中按下 q 退出滚动模式

可以按 Ctrl+s 进行内容搜索, 搜索到的多个内容按 n / N 调转到 下一个 / 上一个 匹配项. 而 Ctrl+semacs bindings. 如果将 tmux 设置成了 vim bindings, 进入 copy mode 再用 slash (/) 进行搜索

使用预设布局

Ctrl+b M-1        switch to even-horizontal layout
Ctrl+b M-2        switch to even-vertical layout
Ctrl+b M-3        switch to main-horizontal layout
Ctrl+b M-4        switch to main-vertical layout
Ctrl+b M-5        switch to tiled layout
Ctrl+b 空格        切换到下一个布局

窗格快捷键

下面是一些窗格操作的快捷键

  • Ctrl+b x:关闭当前窗格
  • Ctrl+b !:将当前窗格拆分为一个独立窗口
  • Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小
  • Ctrl+b t:窗口中央显示一个数字时钟
  • Ctrl+b q:显示窗格编号

其他命令

下面是一些其他命令。

# 列出所有快捷键,及其对应的 Tmux 命令
$ tmux list-keys

# 列出所有 Tmux 命令及其参数
$ tmux list-commands

# 列出当前所有 Tmux 会话的信息
$ tmux info

# 重新加载当前的 Tmux 配置
$ tmux source-file ~/.tmux.conf
[root@centos ~]# tmux -V
tmux 1.8
[root@centos ~]# tmux list-keys
bind-key        C-b send-prefix
bind-key        C-o rotate-window
bind-key        C-z suspend-client
bind-key      Space next-layout
bind-key          ! break-pane
bind-key          " split-window
bind-key          # list-buffers
bind-key          $ command-prompt -I #S "rename-session '%%'"
bind-key          % split-window -h
bind-key          & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key          ' command-prompt -p index "select-window -t ':%%'"
bind-key          ( switch-client -p
bind-key          ) switch-client -n
bind-key          , command-prompt -I #W "rename-window '%%'"
bind-key          - delete-buffer
bind-key          . command-prompt "move-window -t '%%'"
bind-key          0 select-window -t :0
bind-key          1 select-window -t :1
bind-key          2 select-window -t :2
bind-key          3 select-window -t :3
bind-key          4 select-window -t :4
bind-key          5 select-window -t :5
bind-key          6 select-window -t :6
bind-key          7 select-window -t :7
bind-key          8 select-window -t :8
bind-key          9 select-window -t :9
bind-key          : command-prompt
bind-key          ; last-pane
bind-key          = choose-buffer
bind-key          ? list-keys
bind-key          D choose-client
bind-key          L switch-client -l
bind-key          [ copy-mode
bind-key          ] paste-buffer
bind-key          c new-window
bind-key          d detach-client
bind-key          f command-prompt "find-window '%%'"
bind-key          i display-message
bind-key          l last-window
bind-key          n next-window
bind-key          o select-pane -t :.+
bind-key          p previous-window
bind-key          q display-panes
bind-key          r refresh-client
bind-key          s choose-tree
bind-key          t clock-mode
bind-key          w choose-window
bind-key          x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key          z resize-pane -Z
bind-key          { swap-pane -U
bind-key          } swap-pane -D
bind-key          ~ show-messages
bind-key      PPage copy-mode -u
bind-key -r      Up select-pane -U
bind-key -r    Down select-pane -D
bind-key -r    Left select-pane -L
bind-key -r   Right select-pane -R
bind-key        M-1 select-layout even-horizontal
bind-key        M-2 select-layout even-vertical
bind-key        M-3 select-layout main-horizontal
bind-key        M-4 select-layout main-vertical
bind-key        M-5 select-layout tiled
bind-key        M-n next-window -a
bind-key        M-o rotate-window -D
bind-key        M-p previous-window -a
bind-key -r    M-Up resize-pane -U 5
bind-key -r  M-Down resize-pane -D 5
bind-key -r  M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r    C-Up resize-pane -U
bind-key -r  C-Down resize-pane -D
bind-key -r  C-Left resize-pane -L
bind-key -r C-Right resize-pane -R

Tmux 命令中的 M 按键是什么

bind-key        M-1 select-layout even-horizontal
bind-key        M-2 select-layout even-vertical
bind-key        M-3 select-layout main-horizontal
bind-key        M-4 select-layout main-vertical
bind-key        M-5 select-layout tiled
bind-key        M-n next-window -a
bind-key        M-o rotate-window -D
bind-key        M-p previous-window -a

这是 meta 键。所以 M-1meta-1。(就像 C-1control-1 一样)。

如果你有一个普通的 PC 键盘, 当你查看键盘时, 你可能会注意到没有明显标记为 meta 的键。根据你的键盘布局设置方式, meta 通常是 alt 键徽标 (Windows) 键

Symbolics keyboard.jpg

一般可以在 SSH 的客户端里设置 meta 按键映射

Snipaste_2022-03-05_22-49-02.png

tmux cheat sheet
Tmux 快捷键 & 速查表 & 简明教程
Tmux 使用教程
How do I resize tmux pane by holding down prefix and arrow key for a while?
How do I scroll in tmux?
Tmux commands: What is M-whatever

其他
What do the keys on this Symbolics Space Cadet keyboard do?
tmux终端复用/tmate终端共享/screen
GNU Screen splitting
.tmux.conf 配置文件


扫描二维码,在手机上阅读!

添加新评论