Tmux and Screen

Terminal Multiplexers: Screen, Tmux

终端多路复用:Screen,Tmux

命令行选项

术语对照表

英文中文
session会话
attach连接
detach脱离
prefix前缀
multiplexer多路复用
window窗口
regions区域
panes面板
buffer缓存
mark标记
用途screentmux
创建指定名称的会话并连接screen -S footmux new -s foo
创建会话并脱离screen -S foo -d -mtmux new -s foo -d
列出所有会话screen -listtmux ls
连接screen -rtmux attach
连接到指定会话screen -r footmux attach -t foo
通过 pid 连接会话screen -r pid
连接到运行中的会话screen -x foo
销毁指定会话screen -r foo -X quittmux kill-session -t foo
发送命令到指定会话screen -r foo -X commandtmux command -t foo
脱离会话screen -d name

按键绑定

用途screenscreen commandtmuxtmux command
帮助?:help?:help
发送前缀至其他应用a:metaC-b:send-prefix
暂停多路复用C-z:suspendC-z:suspend-client
显示前一个多路复用终端信息m/C-m:lastmsg~:show-messages
加载配置文件:source filename:source-file filename
session
新建会话:new
新建命名会话:new -s name
切换会话s:choose-session
重命名会话:sessionname newname$rename-session newname
销毁会话C-\:quit
windows
创建窗口c/C-c:screenc:new-window
切换下一个窗口n/C-n/<SPACE>:nextnnext-window
切换上一个窗口p/h/C-p/<BACKSPACE>:prevp:previous-window
激活最近使用的窗口C-a:other
选择指定 number 窗口number/' numbernumber:select-window -t number
列出所有窗口w/C-w:windows:list-windows
显示当前窗口信息N:number
重新分配窗口 number. position:move-window
重新分配窗口所在会话. sessname
. sessnum:position
重绘当前窗口l/C-l:redisplayr:refresh-client
交互式选择窗口":windowlist -bw:choose-window
重命名窗口A:title,
选择名为 foo 的窗口':selectf foo
关闭当前窗口k:kill&kill-window
联合窗口 1 到当前窗口:join-pane -s 1
联合窗口 1 的区域 0 到当前窗口:join-pane -s 1.0
regions
上下分割S:split
左右分割`/V`:vsplit
切换到下一区域<TAB>
使区域高度相同:resize =
保留当前区域关闭其他区域Q:only
清除当前区域C:clear
关闭当前区域X:remove
输出日志到文件:log
关闭日志log off
调节当前区域行高:resize +/-n
设置当前区域行高为 nresize n
panes
上下分割":split-window
左右分割%:split-window -h
切换下一区域o:select-pane
列出面板:list-panes
显示面板编号q:list-panes
旋转面板C-o:rotate-window
反向旋转面板M-o:rotate-window -D
相同宽度的面板布局M-1
相同高度的面板布局M-2
交换当前与前一面板{:swap-pane -U
交换当前与后一面板}:swap-pane -D
修改面板布局<SPACE>:next-layout
关闭当前面板x:confim-before kill-pane
break 当前面板至分离窗口!:break-pane
清除当前面板:clear-history
输出日志到文件:pipe-pane "cat > /tmp/tmux.log"
关闭日志:pipe-pane
调节左/上单元大小:resize-pane -L/U n
paste buffer
进入 copy 模式[/C-[/<ESC>:copy[:copy-mode
paste 最近的缓存]]:paste-buffer
缓存列表#:list-buffers
交互式选择缓存=:choose-buffer
缓存保存至文件>:writebuf path:save-buffer path
copy 文件至缓存<:readbuf path:load-buffer path
copy mode
默认绑定Vim styleEmacs-style
设置标记<SPACE>C-<SPACE>
copy from 标记点并退出 copy mode<SPACE>C-w
单列移动h/lC-b/C-h
单行移动j/kC-n/C-p
行开头0C-a
行结尾$C-e
下一个词eM-f
上一个词bM-b
向上翻页C-bM-v
向下翻页C-fC-v
缓存开头gM-<
缓存结尾GM->
向上搜索? phraseC-r phrase
向下搜索/ phraseC-s phrase
退出 copy 模式<ESC>q

自定义

用途screentmux
启动配置文件~/.screenrc~/.tmux.conf
滚动长度defscrollback 2000set-option histoty-limit 2000
配置前缀escape ^B^Bset-optime -g prefix C-a
define key bindingbindbind-key
undefine key bindingunbind-key
配置 copy/scrollback 绑定markkeys h=^b:l=^F:$=^Esetw -g mode-keys vi
关闭启动信息startup_message off
配置默认窗口号set -g base-index 1
显示状态栏caption always
caption splitonly # default
set-option status off
set-option status on
自定义标题caption string "string"set-option status-left "string"
set-option status-right "string"

man tmux

optionsdescription
-2强制假设tmux支持256色
-C启动 control mode -CC关闭回显
-c使用默认 shell 执行指令
-f指定加载配置文件
-l加载login shell配置
-Ltmux 保存服务socket至 TMUX_TMPDIR,如果变量未设置则保存至/tmp 文件夹
-S指定服务socket路径
-u在tmux启东市查找 LC_AlL,LC_CTYPE,LANG三个环境变量,如果存在 UTF8标志则支持UTF8编码
-v展示详细日志记录

Cheat Sheet

Ctrl+b // 激活控制台;此时以下按键生效

快捷键含义
系统操作
?列出所有快捷键;q键返回
d脱离当前会话;返回 shell 界面,输入 tmux attach重新进入会话
D选择要脱离的会话;同时开启多个会话使用
L切换至上一个连接的会话
Ctrl+z挂起当前会话
r强制重绘连接的会话
s选择并切换会话;在同时开启了多个会话时使用
t显示时间信息
(切换至前一个会话
)切换至后一个回话
:进入命令行模式
[进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
]粘贴最近的拷贝缓存区内容
~列出提示信息缓存
#列出所有剪切版缓存
-删除最近的拷贝缓存区内容
窗口操作
c创建新窗口
&关闭当前窗口
0-9切换至指定窗口
p切换至上一窗口
n切换至下一窗口
l在前后两个窗口间互相切换
w通过窗口列表切换窗口
,重命名当前窗口
.修改当前窗口编号
f在所有窗口中查找指定文本
i显示当前窗口信息
面板操作
m标记当前面板
M清除标记的面板
"分隔为上下面板
%分隔为左右面板
x关闭当前面板
;切换至前一个活动面板
!将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键以5个单元格为单位移动边缘以调整当前面板大小
Space在预置的面板布局中循环切换
q显示面板编号
o在当前窗口中选择下一面板
方向键移动光标以选择面板
{向前置换当前面板
}向后置换当前面板
Alt+o逆时针旋转当前窗口的面板
Alt+n切换到下一窗口
Alt+p切换到上一个窗口
Ctrl+o顺时针旋转当前窗口的面板
z切换当前面板缩放状态

Reference

man tmux