陈默的笔记

用 tmux 重新组织我的终端工作流

· 工具

之前一直用 iTerm 的多标签,直到有次 SSH 到远程机器上跑长任务,本地断网,任务跟着没了。痛定思痛开始用 tmux。

我现在的用法

一个项目一个 session,命名规则是 项目-环境,比如 api-prod、api-dev。

tmux new -s api-dev
tmux ls
tmux attach -t api-dev

session 里面固定分三个 window:

几个提升效率的配置

# ~/.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

改多台机器的配置时特别爽,但一定要记得关掉,不然会误操作。