tmux
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返回
刷新配置文件
- 方法一 prefix : source ~/.tmux.conf
- 方法二 关闭服务器,重新开启服务
会话
增
- 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
复制模式
- 前缀 [ //进入复制模式
- 按 space //开始复制,hjkl
- enter //复制,并退出 copy-mode
-
前缀 ] //粘贴
- 要想保存到剪贴板,目前的方法是 去掉鼠标可用,用鼠标选择复制内容
安装 插件实现复制到系统剪切板, 还没有搞定???
- 配置 ~/.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为→
- 设置为 vi 快捷键
保存 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,
- SSH 会话 ID 会在几秒后消失,不过不要紧,你可以通过下面命令获取到这些详细信息。
- tmate show-messages
- 命令会显示 tmate 的日志信息,其中包含了该 ssh 连接内容。
- 只需要在终端上运行你从朋友那得到的 SSH 终端 ID 就行了。类似下面这样。
- $ ssh session: ssh 3KuRj95sEZRHkpPtc2y6jcokP@sg2.tmate.io
- 除了 SSH 会话 ID 以外,你也可以分享 web URL。另外你还可以选择分享的是只读会话还是可读写会话。
- 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 下 vim 光标在各个模式下时的形状都是一样的,怎么改变呢?