macOS 终端效率翻倍:我的 tmux 配置与快捷键全解
本文分享一套面向 macOS 开发者的 tmux 实用配置,覆盖分屏、窗格导航、大小调整、鼠标支持、vi 复制模式与系统剪贴板集成,开箱即用。
为什么需要自定义 tmux?
tmux 默认配置存在几个痛点:
- 分屏后新 pane 总是回到
$HOME,而不是当前工作目录 - 窗格切换只能靠 Prefix + 方向键,效率低
- 复制模式默认 emacs 键位,对 vim 用户不友好
- 复制内容进 tmux 内部 buffer,无法直接
Cmd+V粘贴到其他应用
下面逐块解决。
完整配置
bash
# ~/.tmux.conf
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 基础设置
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
set-option -g prefix C-b
bind-key C-b send-prefix
set -g mouse on
# Status bar
set -g status-right ' prefix: C-b | %H:%M '
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# macOS 剪贴板集成
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
set -s copy-command 'pbcopy'
bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 分屏(继承当前目录)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 窗格边框美化
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 边框顶部显示 pane 编号和标题
set -g pane-border-status top
set -g pane-border-format "#{?pane_active,#[fg=colour0#,bg=colour46#,bold] #{pane_index}: #T #[default],#[fg=colour73#,bg=colour236] #{pane_index}: #T #[default]}"
set -g pane-border-style 'fg=colour245'
set -g pane-active-border-style 'fg=colour46,bold'
set -g window-status-current-style 'fg=colour0,bg=colour46,bold'
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 窗格导航(3 套方案并存)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 方案 1:Option + 方向键(免 Prefix,最快)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# 方案 2:Prefix + hjkl(vim 风格)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 方案 3:Prefix + 方向键(tmux 默认,无需配置)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 窗格大小调整(Prefix + Shift+hjkl)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# -r 表示 500ms 内可连续按,无需重复按 Prefix
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# vi 复制模式 + 系统剪贴板
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
set -g mode-keys vi
set -g set-clipboard on
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi V send-keys -X select-line
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
# 鼠标滚轮自动进入复制模式
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
快捷键速查表
分屏
| 快捷键 | 功能 |
|---|---|
Prefix " |
上下分屏(继承当前目录) |
Prefix % |
左右分屏(继承当前目录) |
窗格导航
| 快捷键 | 风格 | 说明 |
|---|---|---|
Option+方向键 |
免 Prefix | 直接按,最快 |
Prefix + h/j/k/l |
vim | 左/下/上/右 |
Prefix + 方向键 |
默认 | tmux 自带 |
窗格大小调整
| 快捷键 | 功能 |
|---|---|
Prefix H |
向左扩 5 列(可连按) |
Prefix J |
向下扩 5 行(可连按) |
Prefix K |
向上扩 5 行(可连按) |
Prefix L |
向右扩 5 列(可连按) |
按一次 Prefix 后,500ms 内可连续按 H/J/K/L,无需重复按 Prefix。
鼠标操作
| 操作 | 功能 |
|---|---|
| 点击窗格 | 切换焦点 |
| 拖拽边框 | 调整大小 |
| 滚轮 | 自动进入复制模式 |
| 拖选文本 | 复制到系统剪贴板 |
复制模式(vi 键位)
进入:Prefix [ 或鼠标滚轮
| 操作 | 按键 |
|---|---|
| 移动 | h/j/k/l 或方向键 |
| 翻半页 | Ctrl-u / Ctrl-d |
| 翻整页 | Ctrl-b / Ctrl-f |
| 首尾跳转 | g / G |
| 向下搜索 | /关键词 回车 |
| 向上搜索 | ?关键词 回车 |
| 下/上一个匹配 | n / N |
| 开始选取 | v(字符)/ V(整行) |
| 复制并退出 | y 或 Enter |
| 退出 | q |
粘贴:Prefix ](tmux 内)或 Cmd+V(任意应用)
常用内置命令
| 快捷键 | 功能 |
|---|---|
Prefix c |
新建窗口 |
Prefix n / p |
下/上一个窗口 |
Prefix 数字 |
跳到第 N 个窗口 |
Prefix d |
脱离 session |
Prefix x |
关闭当前窗格 |
Prefix z |
窗格全屏/还原 |
Prefix { / } |
交换窗格位置 |
Prefix Space |
循环切换布局 |
Prefix : |
命令行模式 |
设计思路
三套导航并存 :Option+方向键 最快(免 Prefix)、hjkl 适合 vim 用户、方向键兜底。不冲突,按习惯选。
大小写分工 :小写 hjkl 切换窗格,大写 HJKL 调整大小。语义直觉,不用记。
-r 连续操作 :resize 绑定加了 -r,按一次 Prefix 后可以连续调整,调到满意为止。
复制零摩擦 :鼠标拖选、滚轮浏览、v 选取三种方式,全部直通 pbcopy,复制完 Cmd+V 即可粘贴到任意应用。
视觉反馈:活动窗格亮绿边框 + 标题标签,多窗格时一眼定位焦点。
安装
bash
# 将配置写入 ~/.tmux.conf 后执行
tmux source-file ~/.tmux.conf
如果是新 session,配置自动生效。
环境:macOS + tmux 3.x,Prefix 保持默认 Ctrl+B。