Tmux 使用

介绍

  • 将终端和会话分离

  • 相关概念:后台服务 (server),会话 (session),窗口 (window),窗格 (pane)

  • 一个 session 可以包含多个 window,一个 window 可以被分割成多个 pane

  • Tmux 使用教程 - 阮一峰的网络日志


安装

1
2
brew install tmux      # macOS
sudo apt install tmux # Ubuntu

使用

工具


配置

1
2
3
4
cd ~
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .
  • copy-mode 配置
1
2
# 设置快捷键为 vim 风格,默认是 Emacs 风格
setw -g mode-keys vi

快捷键

  • 快捷键(含默认以及 ohmytmux 中的等价快捷键)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# session 快捷键
prefix + d # 分离 session
prefix + s # 列出所有 session
prefix + $ # 重命名当前 session
prefix + ( # 切换到上一个 session
prefix + ) # 切换到下一个 session

# window 快捷键
prefix + c # 新建窗口
prefix + 0~9 # 切换窗口
prefix + w # 打开窗口列表
prefix + f # 定位窗口
prefix + & # 关闭当前窗口

# pane 快捷键
prefix + - / " # 垂直拆分当前窗格
prefix + _ / % # 水平拆分当前窗格
prefix + x # 关闭当前窗格
prefix + ; / o # 光标切换到上/下一个窗格
prefix + > / < # 交换窗格;或 { / }
prefix + H J K L # 调整窗格大小
prefix + h j k l # 导航窗格
prefix + + / z # 将当前窗格最大化为新窗口和最小化
prefix + m # 鼠标模式打开或关闭
prefix + Enter / [ # 进入 copy-mode 模式;按 q 退出;按 Space 开始复制
prefix + ] / p # 粘贴 copy-mode 模式中复制的文本
prefix + q # 显示窗格编号

命令

  • session 相关命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
tmux source-file ~/.tmux.conf         # 刷新配置
tmux ls # list-sessions;列出所有 sessions
tmux new -s session_name # 新建 session,默认从 0 开始
tmux detach # 分离 session
tmux a # attach;重新连接 session
tmux attach -t session_name # 同上
tmux kill-session -t session_name # 杀死
tmux kill-session -a # 杀死除当前 session 的其他
tmux switch -t session_name # 切换
tmux rename-session -t 0 new_name # 重命名

tmux capture-pane -pt session_name # 将指定 session 的窗口内容保存到缓冲区


# 查看 tmux session 中的 pane 中的命令完成情况
# 若为 bash/zsh,则命令已完成;若为具体命令,则命令正在运行
tmux list-panes -a -F "#{session_name}:#{pane_id} #{pane_current_command}"
# # 查看 tmux session 中的 pane 中的进程 ID
tmux list-panes -a -F "#{session_name}:#{pane_id} #{pane_pid}"
# 根据 pane 的进程 ID 查看具体命令
ps f -o pid,cmd --ppid ${pane_pid}