[26/3/24]Tmux入门
核心概念
前缀键(Prefix)
在 Tmux 中,你需要完成任何操作都需要两步!
先按下前缀键,然后再按下功能键,
例如,你需要打开帮助文档,功能键为 ?
那么,你先按下前缀键 ^b (Ctrl+b)
然后松手,接着按下 shift+/ (因为 ? 和 / 是同一个按键)
(这个帮助界面需要按 q 退出)
核心功能
- 持久化会话:比如说断开 SSH 保证服务器继续运行
- 分屏功能:一个屏幕上有多个面板
层级
- 会话:最大的层级,一个会话下可以有多个窗口
- 窗口:一个窗口就是一个屏幕
- 面板:一个窗口可以分出多个面板(也就分屏之后的显示单位)
1 会话管理
- 创建会话:
tmux new -s <会话名字> - 分离会话:
Prefix d(detach 分离) - 查看所有会话:
tmux ls - 重连会话:
tmux attach -t <会话名字> - 终止会话:
tmux kill-session -t <会话名字>
2 窗口管理
- 新建窗口:
Prefix c(create) - 切换窗口:
-
- 上一个:
Prefix n(next) - 下一个:
Prefix p(previous) - 指定编号:
Prefix 数字 - 列表选择:
Prefix w(windows) 回车键确认
- 上一个:
- 重命名窗口:
Prefix , - 关闭窗口:
Prefix &
3 面板管理
- 分屏
-
- 垂直分屏(分成左右两个):
Prefix % - 水平分屏(分成上下两个):
Prefix "
- 垂直分屏(分成左右两个):
- 面板间跳转:
Prefix 方向键 - 调整面板大小:
Prefix+方向键(注意这里要求三个键一起按) - 关闭当前面板:
Prefix x(还需要按y确认)
4 其他
- 命令模式:
Prefix :(类比 vim 的命令模式) - 面板缩放:
Prefix z(取消缩放也是这个按键) - 面板互换:
Prefix {和Prefix } - 快速跳转:
Prefix f(find) 直接搜索窗口名字回车跳转
5 复制模式
注意 :请在配置文件中将键位设置成 vim 模式!
- 进入复制模式:
Prefix [ - 滚动翻页:
-
- 逐行滚动:
上下方向键 - 翻页滚动:
PgUp/PgDn - 退出(不保存复制内容):
q
- 逐行滚动:
- 复制粘贴:
-
- 进入复制模式:
Prefix [此时你应当认为进入了只读模式的 vi 里 - 先移动光标到复制起始位置
- 按下
Spcae开始选择复制范围 - 按下
Enter完成复制 - 使用
Prefix ]来粘贴
- 进入复制模式:
- WLS 下的复制
因为你开启了 set -g mouse on,当你想要把 Tmux 里的报错信息复制到 Windows 系统剪贴板时,请按住键盘上的 Shift 键,然后用鼠标去划选文字。 按住 Shift 的作用是暂时绕过 Tmux 的鼠标接管,唤醒你外层终端(比如 Windows Terminal)的系统级原生复制。划选完毕后,按 Ctrl+Shift+C 或者直接点鼠标右键,这段代码就顺利进入你的 Windows 剪贴板了。
6 配置文件
声明 :由于 Tmux 一般是本地运行,而不是在服务器上运行,所以配置可以多写一点,怎么方便,怎么效率高就怎么来。
文件位置:~/.tmux.con
关键配置:
- 启用鼠标:
set -g mouse on - VIM 键位:
setw -g mode-keys vi - 窗口起始编号为 1,面板起始编号为 1:
set -g base-index 1
setw -g pane-base-index 1 - 手动重载配置:
bind r source-file ~/.tmux.conf ; display-message "Config reloaded..."
- 可以美化,比如启用 256 色:
set -g default-treminal "screen-256color"
- 推荐修改键位:
# 面板跳转 (Vim 风格)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 语义化分屏
bind | split-window -h
bind - split-window -v
# 解绑原来的反人类按键(可选)
unbind '"'
unbind %
推荐配置文档
# 1. 基础底座 (Base Settings)
# 启用鼠标 (滚轮翻页、调整面板大小)
set -g mouse on
# 窗口和面板起始编号为 1 (解放需要去按 0 的手指)
set -g base-index 1
setw -g pane-base-index 1
# 极其关键的防坑配置:消除 Vim 模式下按 ESC 键的延迟
# (如果不配这个,在 Tmux 里用 Vim 敲完代码按 ESC 会卡顿半秒)
set -sg escape-time 10
# 2. 键位重塑 (Key Bindings)
# 开启纯血 Vim 复制模式
setw -g mode-keys vi
# 一键重载配置,并给出极其优雅的底部提示
bind r source-file ~/.tmux.conf ; display-message "✅ Config reloaded! Commander!"
# 解绑反人类的原生分屏按键
unbind '"'
unbind '%'
# 语义化分屏 (竖切为 | ,横切为你喜欢的 _ 或 -)
bind | split-window -h
bind _ split-window -v
bind - split-window -v
# 纯正的 Vim 面板无缝跳转
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 3. 视觉与美化 (Aesthetics & UI)
# 开启 256 色真彩支持
set -g default-terminal "screen-256color"
# 面板边框颜色:非活动面板变暗,活动面板黄色高亮!
# 让你在开 4 个分屏时,一眼就能定焦当前在哪
set -g pane-border-style "fg=colour238"
set -g pane-active-border-style "fg=yellow"
# 底部状态栏整体配色 (极客黑底 + 亮黄字)
# set -g status-style "bg=black,fg=yellow" # 可能会有显示BUG
set -g status-style "bg=colour238,fg=yellow"
# 底部左侧:高亮显示当前所在的 Session 名字 (比如 [LeetCode])
set -g status-left-length 30
set -g status-left "#[fg=green,bold][#S] "
# 底部右侧:显示当前日期和时间 (精确到分)
set -g status-right "#[fg=cyan]%Y-%m-%d #[fg=yellow]%H:%M"
# 底部中间:窗口列表的美化
# 普通窗口:朴素展示
setw -g window-status-format " #I:#W "
# 激活的窗口:黑底粉字,加粗显示,极度醒目
setw -g window-status-current-style "bg=yellow,fg=pink,bold"
setw -g window-status-current-format " #I:#W "
题外话小知识 1:
一个极其经典的 “终端色彩反转陷阱”
遇到的“黄底白字”看不清的问题,根本原因在于:在很多现代终端(比如 Windows Terminal 或 WSL 默认终端)的“暗黑主题”下,系统会强制把 ANSI 标准颜色里的“black(黑色)”映射成“白色或亮灰色” ,以保证在黑底终端上能看清。这就导致了我们代码里写的 fg=black,在你的屏幕上硬生生被终端渲染成了白色!
只需要用极其暴力的“绝对色域”来强行镇压这个 Bug。
题外话小知识 2
如果直接将 windows 上复制的内容粘贴到 vim 中可能会出问题(因为换行等)
不过你可以使用 cat 命令来完成,这样就不会有换行符之类的问题:
# 备份原文件
mv ~/.tmux.conf ~/.tmux.conf.bak
# 用 cat 创建新文件(避免编码问题)
cat > ~/.tmux.conf << 'EOF'
# ==========================================
# 这里是配置文件的内容...(可以多行)
# ==========================================
EOF