【09】Tmux入门

0 阅读6分钟

[26/3/24]Tmux入门

核心概念

前缀键(Prefix)

在 Tmux 中,你需要完成任何操作都需要两步!

先按下前缀键,然后再按下功能键,

例如,你需要打开帮助文档,功能键为 ?

那么,你先按下前缀键 ^b (Ctrl+b)

然后松手,接着按下 shift+/ (因为 ?/ 是同一个按键)

(这个帮助界面需要按 q 退出)

核心功能

  1. 持久化会话:比如说断开 SSH 保证服务器继续运行
  2. 分屏功能:一个屏幕上有多个面板

层级

  1. 会话:最大的层级,一个会话下可以有多个窗口
  2. 窗口:一个窗口就是一个屏幕
  3. 面板:一个窗口可以分出多个面板(也就分屏之后的显示单位)

1 会话管理

  1. 创建会话:tmux new -s <会话名字>
  2. 分离会话:Prefix d (detach 分离)
  3. 查看所有会话:tmux ls
  4. 重连会话:tmux attach -t <会话名字>
  5. 终止会话:tmux kill-session -t <会话名字>

2 窗口管理

  1. 新建窗口:Prefix c (create)
  2. 切换窗口:
    1. 上一个:Prefix n (next)
    2. 下一个:Prefix p (previous)
    3. 指定编号:Prefix 数字
    4. 列表选择:Prefix w (windows) 回车键确认
  1. 重命名窗口:Prefix ,
  2. 关闭窗口:Prefix &

3 面板管理

  1. 分屏
    1. 垂直分屏(分成左右两个):Prefix %
    2. 水平分屏(分成上下两个):Prefix "
  1. 面板间跳转:Prefix 方向键
  2. 调整面板大小:Prefix+方向键 (注意这里要求三个键一起按)
  3. 关闭当前面板:Prefix x (还需要按 y 确认)

4 其他

  1. 命令模式:Prefix : (类比 vim 的命令模式)
  2. 面板缩放:Prefix z (取消缩放也是这个按键)
  3. 面板互换:Prefix {Prefix }
  4. 快速跳转:Prefix f (find) 直接搜索窗口名字回车跳转

5 复制模式

注意 :请在配置文件中将键位设置成 vim 模式!

  1. 进入复制模式:Prefix [
  2. 滚动翻页:
    1. 逐行滚动:上下方向键
    2. 翻页滚动:PgUp / PgDn
    3. 退出(不保存复制内容):q
  1. 复制粘贴:
    1. 进入复制模式:Prefix [ 此时你应当认为进入了只读模式的 vi 里
    2. 先移动光标到复制起始位置
    3. 按下 Spcae 开始选择复制范围
    4. 按下 Enter 完成复制
    5. 使用 Prefix ] 来粘贴
  1. WLS 下的复制

因为你开启了 set -g mouse on,当你想要把 Tmux 里的报错信息复制到 Windows 系统剪贴板时,请按住键盘上的 Shift 键,然后用鼠标去划选文字。 按住 Shift 的作用是暂时绕过 Tmux 的鼠标接管,唤醒你外层终端(比如 Windows Terminal)的系统级原生复制。划选完毕后,按 Ctrl+Shift+C 或者直接点鼠标右键,这段代码就顺利进入你的 Windows 剪贴板了。

6 配置文件

声明 :由于 Tmux 一般是本地运行,而不是在服务器上运行,所以配置可以多写一点,怎么方便,怎么效率高就怎么来。

文件位置:~/.tmux.con

关键配置:

  1. 启用鼠标:set -g mouse on
  2. VIM 键位:setw -g mode-keys vi
  3. 窗口起始编号为 1,面板起始编号为 1:
    set -g base-index 1
    setw -g pane-base-index 1
  4. 手动重载配置:

bind r source-file ~/.tmux.conf ; display-message "Config reloaded..."

  1. 可以美化,比如启用 256 色:

set -g default-treminal "screen-256color"

  1. 推荐修改键位:
# 面板跳转 (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