用 tmux 重新组织我的终端工作流
之前一直用 iTerm 的多标签,直到有次 SSH 到远程机器上跑长任务,本地断网,任务跟着没了。痛定思痛开始用 tmux。
我现在的用法
一个项目一个 session,命名规则是 项目-环境,比如 api-prod、api-dev。
tmux new -s api-dev
tmux ls
tmux attach -t api-dev
session 里面固定分三个 window:
0:edit—— 编辑器1:run—— 跑服务 / 看日志2:ops—— 临时命令、查库
几个提升效率的配置
# ~/.tmux.conf
set -g mouse on
set -g base-index 1
setw -g pane-base-index 1
set -g history-limit 50000
# 用 | 和 - 分屏,符合直觉
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# 重载配置
bind r source-file ~/.tmux.conf \; display "reloaded"
-c "#{pane_current_path}" 这个很关键,新分出来的 pane 会继承当前目录,不用每次都 cd。
滚动和复制
开了 mouse on 之后可以直接用鼠标滚,但复制还是习惯用快捷键:
Ctrl-b [ 进入复制模式
空格 开始选择
回车 复制并退出
如果要在 tmux 里复制到系统剪贴板,Linux 下需要 xclip 或者 wl-copy,Mac 用 pbcopy。我干脆不折腾,直接选中后中键粘贴。
和 SSH 配合
最大的好处是断了重连还在:
ssh server
tmux attach -t work
本地网络再怎么抽风,远程的任务都活着。这个体验一旦习惯就回不去了。
一个小技巧
批量在多个 pane 里执行同一个命令:
Ctrl-b : setw synchronize-panes on
# 输入命令,所有 pane 同步执行
Ctrl-b : setw synchronize-panes off
改多台机器的配置时特别爽,但一定要记得关掉,不然会误操作。