Tmux 使用指南
一、Tmux 简介
Tmux(Terminal Multiplexer)是一个终端复用工具,允许你:
- 分屏操作:在一个终端窗口中创建多个窗格
- 会话管理:保持后台运行的终端会话,即使断开连接
- 窗口管理:在会话中创建多个窗口
核心概念
markdown
Session(会话)
└── Window(窗口)
└── Pane(窗格)
二、基础配置
配置文件位置:~/.tmux.conf
我的配置
bash
# 基础设置
set -g mouse on # 鼠标支持
set -g history-limit 10000 # 历史行数
set -g base-index 1 # 窗口编号从1开始
setw -g pane-base-index 1 # 窗格编号从1开始
# 前缀键改为 Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 重载配置快捷键
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
# 分屏快捷键优化
bind | split-window -h # 竖分屏
bind - split-window -v # 横分屏
# 调整窗格大小(Shift+方向键)
bind -n S-Left resize-pane -L 5
bind -n S-Right resize-pane -R 5
bind -n S-Up resize-pane -U 5
bind -n S-Down resize-pane -D 5
# Vi 风格复制模式
setw -g mode-keys vi
# 复制到系统剪贴板
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
# 状态栏美化
set -g status-style bg=black,fg=white
set -g status-left "#[fg=green]#S "
set -g status-right "#[fg=cyan]%Y-%m-%d %H:%M"
三、常用快捷键
前缀键:
Ctrl+a(默认为Ctrl+b)
会话管理
| 快捷键 | 说明 |
|---|---|
Ctrl+a d |
分离当前会话(后台运行) |
Ctrl+a s |
列出所有会话 |
Ctrl+a $ |
重命名会话 |
Ctrl+a ( |
切换到上一个会话 |
Ctrl+a ) |
切换到下一个会话 |
窗口管理
| 快捷键 | 说明 |
|---|---|
Ctrl+a c |
创建新窗口 |
Ctrl+a n |
切换到下一个窗口 |
Ctrl+a p |
切换到上一个窗口 |
Ctrl+a 数字 |
切换到指定窗口 |
Ctrl+a , |
重命名窗口 |
Ctrl+a & |
关闭当前窗口 |
Ctrl+a w |
显示窗口列表 |
窗格管理
| 快捷键 | 说明 |
|---|---|
| `Ctrl+a | ` |
Ctrl+a - |
水平分屏 |
Ctrl+a 方向键 |
切换窗格 |
Ctrl+a x |
关闭当前窗格 |
Ctrl+a z |
最大化/还原窗格 |
Ctrl+a q |
显示窗格编号 |
Ctrl+a o |
切换到下一个窗格 |
调整窗格大小
| 快捷键 | 说明 |
|---|---|
Shift+Left |
向左扩大窗格 |
Shift+Right |
向右扩大窗格 |
Shift+Up |
向上扩大窗格 |
Shift+Down |
向下扩大窗格 |
复制模式(Vi 风格)
| 快捷键 | 说明 |
|---|---|
Ctrl+a [ |
进入复制模式 |
v |
开始选择文本 |
y |
复制选中内容到系统剪贴板 |
q |
退出复制模式 |
Ctrl+a ] |
粘贴内容 |
四、命令行操作
会话管理
bash
# 创建新会话
tmux new -s <会话名>
# 列出所有会话
tmux ls
# 连接到会话
tmux attach -t <会话名>
tmux a -t <会话名>
# 分离会话
tmux detach
# 终止会话
tmux kill-session -t <会话名>
# 终止所有会话
tmux kill-server
窗口和窗格
bash
# 创建新窗口
tmux new-window -n <窗口名>
# 分屏
tmux split-window -h # 垂直分屏
tmux split-window -v # 水平分屏
# 发送命令到指定会话
tmux send-keys -t <会话名> "命令" Enter
五、自动化脚本示例
创建开发环境启动脚本 ~/dev-tmux.sh:
bash
#!/bin/bash
# 项目开发环境自动启动脚本
PROJECT_NAME="myproject"
# 如果会话已存在则连接
tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ $? -eq 0 ]; then
tmux attach -t $PROJECT_NAME
exit
fi
# 创建新会话
tmux new-session -d -s $PROJECT_NAME
# 创建第一个窗口 - 编辑器
tmux rename-window -t $PROJECT_NAME:0 'editor'
tmux send-keys -t $PROJECT_NAME:0 'cd ~/projects/'$PROJECT_NAME' && vim .' C-m
# 创建第二个窗口 - 服务器
tmux new-window -t $PROJECT_NAME:1 -n 'server'
tmux send-keys -t $PROJECT_NAME:1 'cd ~/projects/'$PROJECT_NAME' && npm run dev' C-m
# 创建第三个窗口 - Git
tmux new-window -t $PROJECT_NAME:2 -n 'git'
tmux send-keys -t $PROJECT_NAME:2 'cd ~/projects/'$PROJECT_NAME C-m
# 连接到会话
tmux attach -t $PROJECT_NAME
运行:chmod +x ~/dev-tmux.sh && ~/dev-tmux.sh
六、实用技巧
1. 同步窗格输入
在多个窗格中同时输入相同命令:
bash
# 开启同步
Ctrl+a :setw synchronize-panes on
# 关闭同步
Ctrl+a :setw synchronize-panes off
2. 保存会话布局
使用 tmux-continuum 插件自动保存和恢复会话:
bash
# 安装 TPM(Tmux Plugin Manager)
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# 在 ~/.tmux.conf 中添加
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# 按 Ctrl+a I 安装插件
3. 快速跳转窗口
bash
# 模糊搜索窗口
Ctrl+a f
# 模糊搜索会话
Ctrl+a s
七、常见问题
Q: 复制到系统剪贴板不生效?
确保已安装 xclip:
bash
sudo apt install xclip
Q: 鼠标选择文本时自动退出复制模式?
配置已添加 MouseDragEnd1Pane 绑定,鼠标选择后自动复制到系统剪贴板。
Q: 如何让新窗口保持当前目录?
在 ~/.tmux.conf 添加:
bash
bind c new-window -c "#{pane_current_path}"
八、插件推荐
| 插件 | 功能 |
|---|---|
tmux-resurrect |
保存/恢复会话 |
tmux-continuum |
自动保存会话 |
tmux-yank |
增强剪贴板支持 |
tmux-prefix-highlight |
前缀键状态提示 |
tmux-fzf |
模糊搜索 |
总结
Tmux 是提升终端效率的利器,关键快捷键速记:
- 会话 :
Ctrl+a d分离,tmux a -t name连接 - 窗口 :
Ctrl+a c新建,Ctrl+a n/p切换 - 窗格 :
Ctrl+a \|/-分屏,Ctrl+a 方向键切换 - 复制 :
Ctrl+a [进入,v选择,y复制