Tmux

了解 Tmux

  • tmux 的全称 terminal multiplexer [‘mʌltɪ,plɛksɚ] 多路器

    • 换句话说,它可以将您的单终端会话分成多个会话
  • Tmux采用C/S模型构建,输入Tmux命令就相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。

  • tmux中有3种概念,

    • 会话(session)

    • 窗口(window)

    • 窗格(pane [peɪn])

      一个会话可以包含多个窗口,一个窗口可以被分割成多个窗格(pane)。

      一个tmux的会话中可以有多个窗口(window),每个窗口又可以分割成多个pane(窗格)。我们工作的最小单位其实是窗格。默认情况下在一个window中,只有一个大窗格,占满整个窗口区域。我们在这个区域工作。

      会话有点像是tmux的服务,在后端运行,我们可以通过tmux命令创建这种服务,并且可以通过tmux命令查看,附加到后端运行的会话中。

安装

sudo apt-get install tmux

  • -t: target-session
  • -s参数表示session名称,如果不加-s参数,那么Tmux默认会新建一个以数字(下标从0开始)命名的session tmux new -s

使用

  • ctrl b 激活控制台;此时以下按键生效
  • 状态栏
    • 0:会话名
    • 0:当前会话的窗口序号
    • myserver :0号窗口的名字
  • ? 列出所有快捷键;按q返回

刷新配置文件

  1. 方法一 prefix : source ~/.tmux.conf
  2. 方法二 关闭服务器,重新开启服务

    会话

    • tmux new-session -s [SESSION-NAME]
    • tmux new -s [SESSION-NAME] //可以为字母或数字
    • tmux new //也可不指定会话名称
    • 此时 tmux 的名称为数字从0开始排列

  • 关闭会话 (在会话内部或外部执行均可)
    • tmux kill-session -t [SESSION-NAME]
  • 关闭服务器,所有的会话都将关闭
    • tmux kill-server
  • 断开当前会话,会话在后台运行
    • tmux detach
    • 前缀 d

  • 重新附加到会话中
    • tmux attach-session -t [session-name]
    • tmux attach -t [SESSION-NAME]
    • tmux a -t [SESSION-NAME]
    • tmux a //如果只有一个会话, 如果不指定会话名,将会链接上次使用的会话
  • 重命名会话
    • tmux rename -t old_session_name new_session_name
    • 前缀 $ 新会话

  • 查看已创建的会话
    • tmux ls
    • tmux list-session
  • 以菜单方式显示 当前linux机器上 tmux 所有的后台会话列表
    • 前缀 s
  • 分离指定会话
    • 前缀 D
  • 分离当前会话
    • 前缀 d
  • 进入命令行模式;此时可以输入支持的命令,例如 kill-server 可以关闭服务器
    • 前缀 :

    • 强制重绘未脱离的会话
      • 前缀 r
    • 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
      • 前缀 ~

窗口

  • 一个会话的所有窗口都会在 状态栏 从左到右 按照数字编号依次排序

  • 创建新窗口
    • 前缀 c

  • 关闭当前窗口
    • 前缀 &

  • 切换至指定窗口
    • 前缀 数字
  • 切换至上一窗口
    • 前缀 p
  • 切换至下一窗口
    • 前缀 n
  • 在前后两个窗口间互相切换
    • 前缀 l(有问题,这个是切换窗格的命令)
  • 通过窗口列表切换窗口
    • 前缀 w
  • 重命名当前窗口;这样便于识别
    • 前缀 ,
  • 修改当前窗口编号;相当于窗口重新排序
    • 前缀 .

  • 在所有窗口中查找指定文本
    • 前缀 f

面板(pane)

  • 分割为上下两个
    • 前缀 “
  • 分割为左右两个
    • 前缀 %
    • 当前窗格周围高亮显示边框

  • 关闭当前面板
    • logout 或者 exit 或者 ctrl+d
    • 一旦你关闭了窗口中的所有窗格,那么该窗口也会消失。
    • 前缀 x (操作之后会给出是否关闭的提示,按y确认即关闭)

  • 在当前窗口中选择下一面板
    • 前缀 o
  • 数字会短暂的出现在窗格上。在这期间,你可以你想要浏览的窗格上对应的数字
    • 前缀 q
  • 移动光标以选择面板
    • 前缀 方向键
  • 修改了配置文件
    • 前缀 hjkl
  • 调整当前面板大小
    • ctrl b ctrl 方向键
  • 修改了配置文件
    • 前缀 Ctrl不松手 hjkl
  • 活动窗格最大化
    • 前缀 z

  • 将当前面板移动到新窗口;即新建一个窗口
    • 前缀 !
  • 向前置换当前面板
    • 前缀 {
  • 向后置换当前面板
    • 前缀 }
  • 显示时钟。然后按enter键后就会恢复到shell终端状态
    • 前缀 t

复制模式

  1. 前缀 [ //进入复制模式
  2. 按 space //开始复制,hjkl
  3. enter //复制,并退出 copy-mode
  4. 前缀 ] //粘贴

  5. 要想保存到剪贴板,目前的方法是 去掉鼠标可用,用鼠标选择复制内容

安装 插件实现复制到系统剪切板, 还没有搞定???

  • 配置 ~/.tmux.conf 实现 v 开始,y 结束
Prior to version 2.4 (20 April 2017):

setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection # Yank selection in copy mode.
After version 2.4:

setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection # Yank selection in copy mode.

https://superuser.com/questions/395158/tmux-copy-mode-select-text-block


配置方式二
# Use v to trigger selection    
bind-key -T copy-mode-vi v send-keys -X begin-selection

# Use y to yank current selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel

https://superuser.com/questions/196060/selecting-text-in-tmux-copy-mode

滚屏

滚屏要进入copy-mode,然后就可以用上下键来滚动屏幕,配置了vi快捷键模式,就可以像操作vi一样来滚动屏幕,非常的方便。退出直接按‘q’键即可。

配置

  • .tmux.conf
    • 设置为 vi 快捷键
      • set -g mode-keys vi
    • 更换前缀
      • set -g prefix C-a #
      • unbind C-b # C-b即Ctrl+b键,unbind意味着解除绑定
      • bind C-a send-prefix # 绑定Ctrl+a为新的指令前缀
    • 使 .tmux.conf 生效的两种方式
      • 重启 tmux
      • 在 Tmux 窗口中,按下前缀,→ : → source-file ~/.tmux.conf → 回车
    • 有的地方可能会出现set-window-option的写法,setw就是它的别名。
    • 开启鼠标支持
      • set-option -g mouse on
      • 右键按 2 次 才会出来
    • 绑定 hjkl
      • -r表示可重复按键,大概500ms之内
      • bind -r k select-pane -U # 绑定k为↑
      • bind -r j select-pane -D # 绑定j为↓
      • bind -r h select-pane -L # 绑定h为←
      • bind -r l select-pane -R # 绑定l为→

保存 tmux 会话

  • Tmux保护现场的能力依赖于Tmux进程,如果进程退出,则意味着会话数据的丢失,因此关机重启后,Tmux中的会话将被清空,这不是我们想要见到的。幸运的是,目前有这样两款插件:Tmux Resurrect ˌrɛzəˈrɛkt 和 Tmux Continuum,可以永久保存Tmux会话(它们均适用于Tmux v1.9及以上版本)。

tmux resurrect

要保存 Tmux 会话,我们只要按 前缀键 + Ctrl-s 就可以了。此时,Tmux 状态栏会显示“Saving …”字样,完毕后会提示 Tmux 环境已保存。

Tmux Resurrect 会将 Tmux 会话的详细信息以文本文件形式保存到 ~/.tmux/resurrect 目录。

还原则进入一个tmux 按 前缀键 + Ctrl-r 即可。

Tmate(teammates)

tmate 的意思是 teammates,它是 tmux 的一个分支,并且使用相同的配置信息(例如快捷键配置,配色方案等)。它是一个终端多路复用器,同时具有即时分享终端的能力。它允许在单个屏幕中创建并操控多个终端,同时这些终端还能与其他同事分享。

你可以分离会话,让作业在后台运行,然后在想要查看状态时重新连接会话。tmate 提供了一个即时配对的方案,让你可以与一个或多个队友共享一个终端。

在屏幕的底部有一个状态栏,显示了当前会话的一些诸如 ssh 命令之类的共享信息。

  • 安装
    • sudo apt-get install tmate
    • 需不需要用 tpm 在 ~/.tmux.conf 中安装呢? 本次实验先安装了这个
  • 使用
    • 在非 Tmux 命令行下 输入 tmate 打开 tmux,
  1. SSH 会话 ID 会在几秒后消失,不过不要紧,你可以通过下面命令获取到这些详细信息。
    1. tmate show-messages
    2. 命令会显示 tmate 的日志信息,其中包含了该 ssh 连接内容。
  2. 只需要在终端上运行你从朋友那得到的 SSH 终端 ID 就行了。类似下面这样。
    1. $ ssh session: ssh 3KuRj95sEZRHkpPtc2y6jcokP@sg2.tmate.io
    2. 除了 SSH 会话 ID 以外,你也可以分享 web URL。另外你还可以选择分享的是只读会话还是可读写会话。
  3. https://linux.cn/article-9096-1.html

tmux tpm使用方法

安装 tpm

Requirements: tmux version 1.9 (or higher), git, bash.

Clone TPM:

$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
Put this at the bottom of .tmux.conf:

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com/user/plugin'
# set -g @plugin 'git@bitbucket.com/user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
Reload TMUX environment so TPM is sourced:

# type this in terminal if tmux is already running
$ tmux source ~/.tmux.conf

Installing plugins

Add new plugin to ~/.tmux.conf with set -g @plugin ‘…’

Press prefix + I (capital I, as in Install) to fetch the plugin.

You’re good to go! The plugin was cloned to ~/.tmux/plugins/ dir and sourced.

Uninstalling plugins

Remove (or comment out) plugin from the list.

Press prefix + alt + u (lowercase u as in uninstall) to remove the plugin.

All the plugins are installed to ~/.tmux/plugins/ so alternatively you can find plugin directory there and remove it.

Key bindings

prefix + I

Installs new plugins from GitHub or any other git repository
Refreshes TMUX environment
prefix + U

updates plugin(s) prefix + alt + u

remove/uninstall plugins not on the plugin list

probmems

  • 在一个 tmux 会话中 tmux new -s 会话名
    • sessions should be nested with care, unset $TMUX to force
  • terminatro 的背景色是 0.9 的透明度,

拓展

tmux 官方手册

tmux 使用手册

Tmux Resurrect使用方法

tmux plugins in Github

  1. tmux 下 vim 光标在各个模式下时的形状都是一样的,怎么改变呢?