经常需要在服务器端安装或者复制一些东西,等待时间较长的情况下如果突然遇到断开连接造成任务终端,既糟心又浪费时间,之前尝试用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 | & | 关闭当前窗口(关闭前需输入 yorn确认) | 
| 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 | 关闭当前面板(关闭前需输入 yorn确认) | 
| 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 | 显示时钟 | 
