我的tmux日常使用

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

Tmux 使用笔记

前言

最近我claude code 写代码比较多,电脑资源占用也紧张,遂尝试 TUI界面,目前 kitty + tmux + lazyvim

之所以选择tmux 而不选择 zellij ,因为tmux 更稳定。之前了解过,因为和kitty 的window,tab 功能重复,所以一直没有尝试,最近看有人推荐,花了两天强制使用了下,真的很好用,感觉比kitty 的layout 管理更好用。

还有就是感谢 ai,有了ai 使用新东西就是快

一、核心概念

1.1 三层结构

Tmux 采用三层模型组织终端:

Session(会话)
  └─ Window 1(窗口)
      ├─ Pane 1(面板)
      └─ Pane 2
  └─ Window 2
      └─ Pane 1
概念说明类比
Session独立工作环境,断开后任务继续运行一个完整工作区
Window会话内的标签页浏览器标签
Pane窗口内的分割区域分屏

1.2 与 Kitty 的对照

用习惯tmux 后,kitty 的没必要了解了

Kitty 的层级是:OS Window → Kitty Tab → Kitty Window,与 tmux 的 Session/Window/Pane 概念相近但不等价。


二、配置文件(~/.tmux.conf)

2.1 设置前缀键为 Ctrl+g

# ========== 改前缀键为 Ctrl+g ==========
set -g prefix C-g
unbind C-b
# 连按两次 Ctrl+g 透传到内部程序(如 Neovim)
bind C-g send-prefix

# ========== Vim 风格 Pane 切换 ==========
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

set -g base-index 1
setw -g pane-base-index 1

2.2 配置热加载

  • tmux 外部tmux source-file ~/.tmux.conf
  • tmux 内部Prefix + : 然后输入 source-file ~/.tmux.conf

三、快捷键速查(Prefix = Ctrl+g

3.1 通用操作

快捷键作用
Prefix + ?查看所有快捷键
Prefix + :进入命令行模式
Prefix + d断开 session(detach,进程继续运行)

3.2 Session 管理

命令行操作:

tmux ls                      # 列出所有 session
tmux a -t <name>             # 接入指定 session(attach 简写)
tmux kill-session -t <name>  # 从外部关闭 session

会话内切换:

快捷键作用
Prefix + s交互式 session 列表(树状 + 预览,推荐)
Prefix + L跳回上一个 session(项目间反复横跳高效)
Prefix + :kill-session非 detach 直接关闭当前 session
Prefix + skill-sessionx 关闭session
Prefix + $rename session

3.3 Window 管理

快捷键作用
Prefix + c新建 window
Prefix + &关闭当前 window
Prefix + ,rename当前 window
Prefix + n / p下一个 / 上一个 window
Prefix + 0~9跳到指定编号 window
Prefix + l跳回上一次活跃的 window
Prefix + w交互式列出所有 session 与 window(推荐)

3.4 Pane 管理

创建与关闭:

快捷键作用
Prefix + %左右分割
Prefix + "上下分割
Prefix + x关闭当前 pane
Prefix + Space循环切换布局

导航:

快捷键作用
Prefix + h/j/k/lVim 风格方向切换(需配置)
Prefix + ↑↓←→方向键切换相邻 pane
Prefix + o顺时针循环切换
Prefix + ;跳回上一个 pane(编辑器/命令行往返高效)
Prefix + q显示 pane 编号,按数字直接跳转

4. 配置文件

这是我开发机器上的tmux 配置

# ========== 1. 改前缀键为 Ctrl+g ==========
set -g prefix C-g
unbind C-b
bind C-g send-prefix

# 开启支持鼠标
set -g mouse on

# ========== window/pane 索引从 1 开始 ==========
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on


# ========== 窗口名固定 ==========
set -g automatic-rename off
set -g allow-rename off

# ========== copy-mode 选区高亮 ==========
# reverse 把当前单元格 fg/bg 互换,永远是最大对比;bold 加强可读性
set -g mode-style "reverse,bold"


# 1. 确保开启了 vi 模式
set-window-option -g mode-keys vi

# scrollback mode start
# 2. 在 copy-mode-vi 中配置类 Neovim 的半屏滚动
# -X 表示执行 tmux 命令
# halfpage-up 和 halfpage-down 是 tmux 内置的滚动指令
bind-key -T copy-mode-vi 'C-u' send-keys -X halfpage-up
bind-key -T copy-mode-vi 'C-d' send-keys -X halfpage-down

# 3. j 和 k 默认就是行滚动,但如果你想确保它们更灵敏
bind-key -T copy-mode-vi 'j' send-keys -X cursor-down
bind-key -T copy-mode-vi 'k' send-keys -X cursor-up
# scrollback mode end

# 1. 绑定 v 开始选择 (Visual 模式)
bind-key -T copy-mode-vi v send-keys -X begin-selection

# 2. y 复制 → 由 tmux-yank 接管(跨平台自动探测剪贴板工具 + OSC 52)

# ========== Vim 风格 Pane 切换 ==========
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 放行终端控制序列:OSC 52(远程剪贴板回流)、kitty graphics/keyboard 协议
set -g allow-passthrough on

# 开启 OSC 52,SSH 远程剪贴板回流必备
set -s set-clipboard on

set-option -g update-environment "KITTY_PID KITTY_WINDOW_ID"

# 转发终端 focus in/out 事件,Ink/React TUI(如 Claude Code)依赖它做重绘
set -g focus-events on

# ========== Plugins ==========
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'omerxx/tmux-floax'
set -g @plugin 'catppuccin/tmux#v2.1.3'

# ========== tmux-floax(浮动 pane) ==========
set -g @floax-bind 'f'                      # Prefix + f 唤起/隐藏浮窗(避开默认 p 与 previous-window 冲突)
set -g @floax-width '80%'
set -g @floax-height '80%'
set -g @floax-border-color 'magenta'
set -g @floax-text-color 'blue'
set -g @floax-change-path 'true'            # 浮窗继承当前 pane 的 pwd

# ========== tmux-yank ==========
set -g @yank_selection 'clipboard'         # 默认目标:系统剪贴板
set -g @yank_selection_mouse 'clipboard'   # 鼠标选中也写剪贴板
set -g @yank_action 'copy-pipe'            # 复制后保持 copy-mode(继续选/搜)

# ========== Catppuccin 主题 ==========
set -g @catppuccin_flavor 'mocha'           # latte / frappe / macchiato / mocha
set -g @catppuccin_window_status_style 'rounded'
# 状态栏显示手动设定的 window name (#W),而不是默认的 pane title (#T)
set -g @catppuccin_window_text ' #{?window_zoomed_flag,[Z] ,}#W'
set -g @catppuccin_window_current_text ' #{?window_zoomed_flag,[Z] ,}#W'

# 状态栏(左:copy-mode 徽章,右空)
set -g status-right-length 100
set -g status-left-length 100
set -g status-right ''

# 进 copy-mode 时左下角弹出红底徽章;非 copy-mode 不占位
set -g status-left '#{?pane_in_mode,#[bg=#f38ba8 fg=#1e1e2e bold] [C] COPY #[default] ,}'

# 刷新策略:徽章靠 mode-changed hook 即时触发;周期刷新只为喂 tmux-continuum
# 的 save 检查脚本,对比 @continuum-save-interval(15min) 粒度,60s 足够
set -g status-interval 60
set-hook -g pane-mode-changed 'refresh-client -S'

# 多 client 接同一 session 时,pane 尺寸只跟随实际显示它的 client,减少 reflow
setw -g aggressive-resize on

# resurrect: 恢复时也恢复 neovim session(可选,需 lazyvim 配 persistence)
set -g @resurrect-strategy-nvim 'session'

# continuum: 自动保存间隔(分钟),默认 15
set -g @continuum-restore 'on'      # tmux 启动时自动恢复
set -g @continuum-save-interval '15'

# ========== 必须放最后一行 ==========
run '~/.tmux/plugins/tpm/tpm'

# ========== 覆盖 catppuccin 的边框样式(必须在 tpm 之后,否则被插件覆盖)==========
# 进 copy-mode 的 pane 边框变红加粗,多 pane 时一眼锁定
set -g pane-active-border-style "#{?pane_in_mode,fg=#f38ba8 bold,fg=#b4befe}"

server 端tmux配置

server端建议配置, 越用越香

# 1. 解除默认的 Ctrl+b 前缀
unbind C-b

# 2. 设置新的前缀为 Ctrl+g
set -g prefix C-g

# 3. 绑定 Ctrl+g 发送前缀(方便你在嵌套的 tmux 中使用)
bind C-g send-prefix

# 4. 优化体验(可选,推荐)
# 设置索引从 1 开始(方便键盘左手操作面板)
set -g base-index 1
setw -g pane-base-index 1
# ========== Vim 风格 Pane 切换 ==========
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 开启支持鼠标
set -g mouse on


# ========== 窗口名固定 ==========
set -g automatic-rename off
set -g allow-rename off

# ========== copy-mode 选区高亮 ==========
# reverse 把当前单元格 fg/bg 互换,永远是最大对比;bold 加强可读性
set -g mode-style "reverse,bold"


# 1. 确保开启了 vi 模式
set-window-option -g mode-keys vi

# scrollback mode start
# 2. 在 copy-mode-vi 中配置类 Neovim 的半屏滚动
# -X 表示执行 tmux 命令
# halfpage-up 和 halfpage-down 是 tmux 内置的滚动指令
bind-key -T copy-mode-vi 'C-u' send-keys -X halfpage-up
bind-key -T copy-mode-vi 'C-d' send-keys -X halfpage-down

# 3. j 和 k 默认就是行滚动,但如果你想确保它们更灵敏
bind-key -T copy-mode-vi 'j' send-keys -X cursor-down
bind-key -T copy-mode-vi 'k' send-keys -X cursor-up
# scrollback mode end

# 1. 绑定 v 开始选择 (Visual 模式)
bind-key -T copy-mode-vi v send-keys -X begin-selection

# 开启 OSC 52,SSH 远程剪贴板回流必备
set -s set-clipboard on

# ========== 插件管理 TPM ==========
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-yank'

# ========== tmux-yank 配置 ==========
# y 复制选中内容到系统剪贴板
bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel
# 鼠标拖拽选中后自动复制
set -g @yank_action 'copy-pipe-no-clear'

# 必须放在最后一行
run '~/.tmux/plugins/tpm/tpm'

# 【不退出模式】复制后保持在 copy-mode,且清除选中高亮
bind-key -T copy-mode-vi 'y' if-shell -F '#{selection_present}' \
    'send-keys -X copy-pipe ; send-keys -X clear-selection' \
    'send-keys -X select-line ; send-keys -X copy-pipe ; send-keys -X clear-selection'

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

内容概要:本文系统研究了基于动态三维环境下的Q-Learning算法在无人机自主避障路径规划中的应用,依托Matlab代码实现,深入剖析了强化学习在复杂、时变空间中实现智能决策的机制。研究构建了三维网格化状态空间模型,设计了合理的动作集合与奖励函数,充分考虑静态与动态障碍物的存在,使无人机能够通过与环境持续交互,自主学习规避障碍并趋近目标的最优策略。文章不仅展示了Q-Learning算法在路径规划中的具体实现流程,还涵盖了状态表示、策略迭代、收敛性分析等关键环节,并通过仿真实验验证了算法的有效性与鲁棒性,为智能体在动态环境中的自主导航提供了理论依据和技术参考。; 适合人群:具备人工智能、自动化、计算机科学或机器人学等相关专业背景,熟悉Matlab编程语言和基本的强化学习概念,从事无人机控制、智能导航、路径规划算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于城市峡谷、灾害现场等复杂动态三维场景中无人机的自主飞行与紧急避障;②作为强化学习解决实际路径规划问题的教学实例,帮助理解Q-Learning的核心思想、状态-动作值函数更新过程及探索-利用权衡策略;③为后续研究更先进的深度强化学习算法(如DQN、PPO)在无人机控制中的应用奠定基础和提供对比基准。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,通过调整学习率、折扣因子、探索率(ε-greedy)等超参数,观察其对算法收敛速度和最终路径规划质量的影响,并尝试修改环境复杂度(如增加障碍物密度或动态性)以评估算法的泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值