Tmux
What is Tmux
Tmux 是一个终端复用器(terminal multiplexer)属于程序开发和运维常用的开发工具。
类似的终端复用器还有 GNU Screen。Tmux 与它功能相似,但是更易用,也更强大。
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session)。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。
Can I use Tmux on Windows OS
根据目前的资料,Tmux 目前只能在 macOS 或 Linux 上安装和使用,不支持 Windows 系统。
Do Your Need Tmux
不是专业的程序开发和运维工作人员,平时只是在 Terminal 下:
- 使用 Neovim 写 Markdown 文档,同时操作多个文档文件
- 使用 yt-dlp 下载 YouTube 或 Amazon 的视频,同时下载多个视频文件
需要 Tmux 吗?不,你目前的工作流程并不需要 Tmux,因为这其中并牵涉会话与窗口的「解绑」需求,你仅仅只是需要同时操作多个窗口而已。
- macOS: iTerm2 → Right Click → New Window (Default Profile) 即可打开一个新的 iTerm2 终端窗口
- Windows OS: Windows Terminal
使用 Tmux
在使用 Tmux 之前,系统间的嵌套关系为:终端 iTerm2 → Shell Zsh → 命令行应用程序 (Neovim, Yazi, yt-dlp...)。在使用 Tmux 之后,系统间的嵌套关系为:终端 iTerm2 → Tmux → Shell Zsh → 命令行应用程序 (Neovim, Yazi, yt-dlp...)。
由此可见,Tmux 可以看作是位于终端和 Shell 之间的一个中间层,而它的作用就是:在单一的 iTerm2 终端窗口内,通过运行 Tmux 来进行多个会话、多个窗口、多个空格的操作。
安装
Tmux 内部的实体层级关系:会话 → 窗口 → 窗格 (session → window → pane)
配置
建议的配置文件所在位置:~/.tmux.conf
以下是参考别人的配置文件,注意自行甄别和选择使用:
set-option -sa terminal-overrides ",xterm*:Tc"
set -g mouse on
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Vim style pane selection
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Start windows and panes at 1, not 0
set -g base-index 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
# Use Alt-arrow keys without prefix key to switch panes
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
# Shift arrow to switch windows
bind -n S-Left previous-window
bind -n S-Right next-window
# Shift Alt vim keys to switch windows
bind -n M-H previous-window
bind -n M-L next-window
set -g @catppuccin_flavour 'mocha'
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'christoomey/vim-tmux-navigator'
set -g @plugin 'dreamsofcode-io/catppuccin-tmux'
set -g @plugin 'tmux-plugins/tmux-yank'
run '~/.tmux/plugins/tpm/tpm'
# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
进入
tmux
退出
C-d
或 exit
,每次运行会依次退出当前的 pane,window,或 session,退出最后的 session 之后,Tmux 退出。
前缀命令
命令前缀 C-b
,建议在 Tmux 配置文件内将前缀命令更换为 C-a
。
会话管理
新建会话
分离会话
接入会话
中止会话
切换会话
重新命令会话
C-a?
快捷键列表,q
退出列表C-as
列出所有会话列表,然后可通过上下箭头键↑
和↓
选择会话C-a$
改名会话C-ad
分离会话C-a:
命令模式new-session
新建会话new-window
新建窗口split-window
上下拆分窗口split-window -h
水平拆分窗口
C-a{num}
按照编号切换窗口C-a{arrow}
通过箭头键移动光标至各个 paneC-ac
新建窗口C-a"
水平拆分窗口C-a%
上下拆分窗口tmux attach
接入上次会话tmux attach -t 0
使用会话编号tmux attach -t <session-name>
使用会话名称