..
tmux命令的使用
介绍
tmux 应该是 “terminal multiplexer” 的缩写,是用来进行终端复用的。不过日常开发时,我更喜欢使用多标签。但是一旦需要在远程服务器上执行时长比较长的命令的时候,那就不得不使用 tmux 了。因为它是在服务器上启动一个 tmux 后台进程在维系终端的使用,即便你跟服务器之间的 ssh 连接断开了,也不影响命令的执行。
日常实在是少用,所以把一些"常用",又经常忘记的用例记录一下。
用例
进入"滚动模式"
在 tmux 里,你会发现上下键无法滚动终端输出。tmux 需要在 copy-mode 下,才能进行滚动,进而查看命令的输出。
按 C-b + [
进入 copy-mode
。这时候就可以用上下键,或者类似 Emacs 可以使用 C-s
与 C-r
进行搜索。
要退出 copy-mode
只需要按下 q
即可退出。
窗格管理
C-b + %
左右分屏C-b + "
上下分屏C-b + x
关闭分屏,需要再按下y
进行确认C-b + o
进行循环切换分屏,这个操作跟 emacs 类似C-b + ;
切换到上一个窗格,;
就在字母l
旁边。跟切换到上一个窗口的快捷键类似C-b + q
会显示每个窗格的编号,然后按对应数字,即可跳转过去。其编号顺序跟 emacs 类似C-b + z
切换窗格的进入或退出全屏模式C-b + {
跟上一个窗格对换C-b + }
跟下一个窗格对换
窗口管理
C-b + c
新建C-b + ,
重命名C-b + number
切换到对应的窗口C-b + l
切换到上次切换的窗口C-b + &
关闭窗口C-b + f
按关键字搜索窗口(跨 session)C-b + '
按关键字搜索并跳转到某个窗口。这个没有任何交互,只需要输入可以唯一确认一个 window 的字符即可。
session 切换
C-b + s
进入 session 列表。选择之后,可以切换。可以用数字选中、也可以是光标移动按回车选中。C-b + L
切换到上一个 session。
滚动
tmux 并不支持鼠标滚动上翻历史输出结果。tmux 用的是一个叫 “copy mode” 的方式来替代。
C-b [
进入 copy mode。这时候可以使用类 emacs 的快捷键来翻页、搜索目标文本- 按下
q
即可退出 copy mode。如果没有文本要复制,这样做即可退出 copy mode。 - 按下
Ctrl + Space
进入选择文本、按下Alt + w
复制文本并退出 copy mode。行为跟 emacs 几乎一致。 - 按下
C-b ]
粘贴前面复制的文本。
改键
个人习惯用 C-b
来左移光标。这跟 tmux
的 Prefix 的默认快捷键冲突了。所以对 Prefix
进行了改键。
在 ~/.tmux.conf
里写入如下内容:
unbind C-b
set-option -g prefix C-x
bind-key C-x send-prefix
TERM 环境变量
tmux 的 TERM 默认是 screen
。这会导致 vim 里粘贴代码缩进错乱,深层原因不明。可以把 TERM 的值设置成 xterm-256color
。~/.tmux.conf
配置如下:
set -g default-terminal "xterm-256color"
清爽的使用方式
使用 tmux 如果不及时清理,就会用着用着出现一大堆 session,看起来不清爽,也占资源。个人梳理了一个自适用的流程来:
- 每次准备新建 session 前,可以先查询一下有什么 session。执行
tmux ls
。 - 如果发现可以复用的 session,就 attach 这个 session。 执行
tmux attach-session -t <session-name>
- 如果没有可以复用的 session,才新建 session。使用
tmux new -s <session-name>
来新建一个有名字的 session。如果不小心创建了一个匿名的 session,进入 session 之后,也可执行C-x $
(即,rename current session 命令)来重命名 session。 - 确认 session 所执行的任务完成后,要及时清理掉对应的 session。执行
tmux kill-session -t <session-name>
。