Skip to content

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-dexit,每次运行会依次退出当前的 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} 通过箭头键移动光标至各个 pane
  • C-ac 新建窗口
  • C-a" 水平拆分窗口
  • C-a% 上下拆分窗口
  • tmux attach 接入上次会话
  • tmux attach -t 0 使用会话编号
  • tmux attach -t <session-name> 使用会话名称
最近更新