使用tmux保留终端现场

all contains

Posted by laosuan on July 23, 2020

经常需要在服务器端安装或者复制一些东西,等待时间较长的情况下如果突然遇到断开连接造成任务终端,既糟心又浪费时间,之前尝试用screen开启保留窗口解决,但体验实在不敢恭维以至于很多时候忘记用,下面推荐一款既能保留会话内容又方便好看的工具–tmux

在Linux中安装:

sudo apt-get install tmux

使用(打开上次的会话):

tmux a

// view previous stdout
Ctrl-b then [ to enter copy mode, use Down/Up arrows or PageDown and PageUp keys, q or Enter to exit copy mode.

编辑~/.tmux.conf, 配置一个beatiful的云终端

bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# 设置前缀键,默认为Ctrl+n
set -g prefix C-n
# 释放之前的Ctrl-b前缀快捷键
unbind C-b
#jtmux有一个延时以方便用户按键组合,默认有点长。这里设置为1秒钟
set -s escape-time 1
# 设置动态加载tmux配置文件的快捷键
bind r source-file ~/.tmux.conf \; display "Configuration Reloaded"
# 设置窗口标签的前景及背景色
# setw -g window-status-fg colour72
# setw -g window-status-bg colour238
# junegunn
set-window-option -g window-status-format '#[bg=colour238]#[fg=colour107] #I #[bg=colour239]#[fg=colour110] #[bg=colour240]#W#[bg=colour239]#[fg=colour195]#F#[bg=colour238] '
set-window-option -g window-status-current-format '#[bg=colour236]#[fg=colour215,bold] #I:#[bg=colour235]#[fg=colour167] #[bg=colour234]#W#[bg=colour235]#[fg=colour195]#F#[bg=colour236] '
setw -g window-status-attr dim
# 设置当前窗口标签的前景及背景色,所谓当前窗口标签会显示在状态栏中间
# setw -g window-status-current-fg colour22
# setw -g window-status-current-bg colour73
# setw -g window-status-current-attr bright
# 设置窗口分割的边框颜色
# set -g pane-border-fg yellow
set -g pane-border-fg colour237
# set -g pane-border-bg black
# 设置当前窗口分割的边框颜色
# set -g pane-active-border-fg green
set -g pane-active-border-fg colour240
# set -g pane-active-border-bg yellow
# 设置提示信息的前景及背景色, e.g, Reload
set -g message-fg colour168
set -g message-bg colour237
set -g message-attr bright
#set -g set-titles-string '#T'
###################  状态栏设置  ###############################
# 以下色彩为mac环境下,Linux下可能需重新设置颜色
# 设置状态栏前景色,背景色
#set -g status-fg white
#set -g status-bg black
# 设置状态栏前景及背景色
set -g status-bg colour237
set -g status-fg colour68
# 设置状态栏左部宽度  默认为10
set -g status-left-length 45
# 设置状态栏左部显示内容。
# https://gitlab.com/gnachman/iterm2/issues/6666
# set -g status-left "#[fg=colour252,bold,bg=colour243] 🌺  S: #S #[fg=colour250,bg=colour239] 🏵  W: #I #[fg=yellow,bg=colour237] ☘ #[fg=colour250,bg=colour237] P: #P#[default]"
# set-option -g status-left '#[bg=colour72] #[bg=colour234] #[bg=colour235] #[bg=colour236]#[fg=colour185,bg=colour238] 🌺  S:#S #[fg=colour251,bg=colour239] 💻  #h '
# set-option -g status-left '#[bg=colour72] #[bg=colour236] #[bg=colour237]#[fg=colour185,bg=colour238] 🌺  S:#S #[fg=colour251,bg=colour239] 💻  #h '
set-option -g status-left '#[bg=colour72] #[bg=colour236] #[bg=colour237]#[fg=colour185,bg=colour238]  S:#S #[fg=colour251,bg=colour239] h:#h '
# 设置状态栏右部宽度
set -g status-right-length 48
# 设置状态栏右部内容,这里设置为时间信息
# macOS
# set -g status-right "#[fg=colour251,bg=colour239] 🗓  %b-%d #[fg=colour251,bg=colour238] ⏱  %R #[fg=colour251,bg=colour237] 🐳  #(ifconfig | grep 'inet.*netmask.*broadcast' | awk '{print $2}') #[bg=colour236] #[bg=colour235] #[bg=colour72] "
set -g status-right "#[fg=colour251,bg=colour239]%b-%d #[fg=colour251,bg=colour238] %R #[fg=colour251,bg=colour237] #(ifconfig | grep 'inet.*netmask.*broadcast' | awk '{print $2}') #[bg=colour236] #[bg=colour235] #[bg=colour72] "
set -g status-right "#[fg=colour251,bg=colour239]%b-%d #[fg=colour251,bg=colour238] %R #[fg=colour251,bg=colour237] #(ifconfig | grep 'inet.*netmask.*broadcast' | awk '{print $2}') #[bg=colour236] #[bg=colour235] #[bg=colour72] "
set-option -g status-left "#[fg=colour248, bg=colour241] S:#S #[fg=colour241, bg=colour237, nobold, noitalics, nounderscore]"
set-option -g status-right "#[fg=colour239, bg=colour237, nobold, nounderscore, noitalics]#[fg=colour246,bg=colour239] %Y-%m-%d  %H:%M #[fg=colour248, bg=colour239, nobold, noitalics, nounderscore]#[fg=colour237, bg=colour248] #(ifconfig | grep 'inet.*netmask.*broadcast' | awk '{print $2}') "
# Ubuntu
# set -g status-right "#[fg=colour251,bg=colour239] 🗓  %b-%d #[fg=colour251,bg=colour238] ⏱  %R #[fg=colour251,bg=colour237] 🐳  #(ifconfig | grep 'inet addr:192' | cut -d: -f2 | awk '{print $1}') #[bg=colour236] #[bg=colour72] "
# 窗口信息居中显示
set -g status-justify centre
# 设置状态栏更新时间 每60秒更新一次,默认是15秒更新
set -g status-interval 60
# https://github.com/neovim/neovim/wiki/FAQ#cursor-shape-doesnt-change-in-tmux
set -g -a terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
# Move status bar to the top
# set-option -g status-position top
set-option -g status-position bottom
set-option -g status on
set-option -g status-interval 2
set-option -g status-justify "centre"
set-option -g status-left-length 60
set-option -g status-right-length 90
set-option -g status-left "#(~/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/tmux-powerline/powerline.sh right)"
set-window-option -g window-status-current-format "#[fg=colour235, bg=colour27]⮀#[fg=colour255, bg=colour27] #I ⮁ #W #[fg=colour27, bg=colour235]⮀"
bind C-[ run '~/tmux-powerline/mute_powerline.sh left'		# Mute left statusbar.
bind C-] run '~/tmux-powerline/mute_powerline.sh right'		# Mute right statusbar.

ps:在iPad pro下载blink使用,体验相当好。

常用快捷键:

  • 前缀键:默认为Ctrl+b, 上述配置已改为Ctrl+n

表一:系统指令。

前缀 指令 描述
Ctrl+n ? 显示快捷键帮助文档
Ctrl+n d 断开当前会话
Ctrl+n D 选择要断开的会话
Ctrl+n Ctrl+z 挂起当前会话
Ctrl+n r 强制重载当前会话
Ctrl+n s 显示会话列表用于选择并切换
Ctrl+n : 进入命令行模式,此时可直接输入ls等命令
Ctrl+n [ 进入复制模式,按q退出
Ctrl+n ] 粘贴复制模式中复制的文本
Ctrl+n ~ 列出提示信息缓存

表二:窗口(window)指令。

前缀 指令 描述
Ctrl+n c 新建窗口
Ctrl+n & 关闭当前窗口(关闭前需输入y or n确认)
Ctrl+n 0~9 切换到指定窗口
Ctrl+n p 切换到上一窗口
Ctrl+n n 切换到下一窗口
Ctrl+n w 打开窗口列表,用于且切换窗口
Ctrl+n , 重命名当前窗口
Ctrl+n . 修改当前窗口编号(适用于窗口重新排序)
Ctrl+n f 快速定位到窗口(输入关键字匹配窗口名称)

表三:面板(pane)指令。

前缀 指令 描述
Ctrl+n " 当前面板上下一分为二,下侧新建面板
Ctrl+n % 当前面板左右一分为二,右侧新建面板
Ctrl+n x 关闭当前面板(关闭前需输入y or n确认)
Ctrl+n z 最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增)
Ctrl+n ! 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效)
Ctrl+n ; 切换到最后一次使用的面板
Ctrl+n q 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板
Ctrl+n { 向前置换当前面板
Ctrl+n } 向后置换当前面板
Ctrl+n Ctrl+o 顺时针旋转当前窗口中的所有面板
Ctrl+n 方向键 移动光标切换面板
Ctrl+n o 选择下一面板
Ctrl+n 空格键 在自带的面板布局中循环切换
Ctrl+n Alt+方向键 以5个单元格为单位调整当前面板边缘
Ctrl+n Ctrl+方向键 以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖)
Ctrl+n t 显示时钟

tmux使用教程: