Loading

Tmux 复制模式与使用

我们在使用终端的过程中,常常会通过向上翻滚来回顾终端历史输出或者复制历史输出内容。但是在 tmux 的使用过程中你会发现我们无法直接查看终端历史输出内容。这是因为 tmux 将查看终端历史这一功能需要进入专门的复制模式(Copy-Mode)后才能使用。本文将详细介绍 tmux 复制模式的核心功能和使用技巧,帮助你充分利用这一强大工具。

1、什么是复制模式?

tmux 的复制模式允许用户在会话的滚动缓冲区中自由移动光标、选择文本并进行复制。
它的核心功能包括:

  • 浏览窗口历史输出,即使数据已超出屏幕显示范围。
  • 精确选择目标内容并复制到剪贴板或存储到系统中。
  • 使用键盘快捷键快速导航和操作,避免鼠标操作的局限性。

默认情况下,tmux 的复制模式启用了类似 vi 的键位绑定,适合熟悉 vi 或 vim 编辑器的用户。


二、进入复制模式

复制模式可以通过快捷键Ctrl+b [ 激活j。首先按下快捷键 Ctrl+b , 松开后按下 [.

如果你的 tmux 配置文件启用了鼠标支持(set -g mouse on),可以直接通过滚动鼠标进入复制模式.

提示:默认滚动缓冲区长度为 2000 行。如果需要更长的历史记录,可以在配置文件中设置:

set -g history-limit 10000

三、复制模式的核心操作

进入复制模式后,可以使用键盘快捷键进行导航和选择内容。以下是vi模式下常见的操作命令:

功能 快捷键 说明
向上滚动 k 向上滚动一行
向下滚动 j 向下滚动一行
向上翻页 PageUpCtrl + b 快速向上翻页
向下翻页 PageDownCtrl + f 快速向下翻页
移动到历史开头 gg 跳转到历史记录开头
移动到历史结束 G 跳转到历史记录结尾
移动到行首 0^ 跳转到当前行的开头
移动到行尾 $ 跳转到当前行的末尾
查找文本 /? 搜索目标文本,/ 向下,? 向上
退出复制模式 q 退出当前模式,返回正常窗口
开始选择内容 Space 设置文本选择的起点
复制选中内容 Enter 确定选择范围并复制内容到 tmux 缓冲区
退出复制模式 Escape 退出复制模式

根据 tmux 版本的不同,部分 tmux 默认进入的是 Emacs 模式的快捷键。以下是 Emacs 模式下常见的操作命令:

功能 快捷键 说明
向上滚动 Ctrl+p 向上滚动一行
向下滚动 Ctrl+n 向下滚动一行
向上翻页 PageUpCtrl + b 快速向上翻页
向下翻页 PageDownCtrl + vSpace 快速向下翻页
移动到历史开头 Alt+Shift+, 跳转到历史记录开头
移动到历史结束 Alt+shift+. 跳转到历史记录结尾
移动到行首 Ctrl+a 跳转到当前行的开头
移动到行尾 Ctrl+e 跳转到当前行的末尾
查找文本 Ctrl+sCtrl+r 搜索目标文本,Ctrl+s 向下,Ctrl+r 向上搜索
退出复制模式 Ctrl+g 退出当前模式,返回正常窗口
开始选择内容 Ctrl+Space 设置文本选择的起点
复制选中内容 Enter 确定选择范围并复制内容到 tmux 缓冲区
退出复制模式 Escape 退出复制模式

tmux 复制当前终端全部历史输出

tmux 可以将当前 pane 中的终端历史记录输出到一个文件中以便后续使用。可以通过 tmux 的命令模式进行操作:

  1. 快捷键 Ctrl+b : 进入 tmux 命令模式,输入 capture-pane -J -S - 捕获当前窗格历史输出 -S - 表示从历史记录开始进行捕获
  2. 快捷键 Ctrl+b : 再次进入 tmux 命令模式,输入 save-buffer ~/tmux1.log 保存当前 buffer 中的内容到文件中去

capture-pane 的其他选项

  • -S: 指定输出开始, - 表示从头开始,也可以指定相对于当前行的负值如 -300 表示从当前行的前300行开始复制
  • -E: 指定输出结束,如果没有指定则为当前屏幕输出的最后一行
  • -J: 保留尾随空格并连接任何换行的行
  • -e: 输出将包括文本和背景属性的转义序列。

输入 clear-history 可以清除终端历史

tmux 复制当前终端历史输出(方式2)

通过 tmux copy-mode 同样可以实现将输出终端历史记录输出到一个文件中以便后续使用。

  1. 快捷键 Ctrl+b [ 进入复制模式,默认 Emacs 模式快捷键。
  2. 快捷键 Alt+Shift+, 跳转到历史输出开始
  3. 快捷键 Ctrl+Space 开始选择
  4. 快捷键 Alt+shift+. 跳转到历史输出最后一行
  5. 快捷键 Ctrl+w 复制选择内容并退出选择
  6. 快捷键 Ctrl+b : 进入命令模式,输入 save-buffer ~/tmux1.log 保存当前 buffer 中的内容到文件中.

Tmux 部分配置文件参考 ~/.tmux.conf

bind C-a send-prefix2
set -g base-index 1
set-option -g pane-base-index 1
bind B move-window -r
set-option -g mouse on
set-option -g history-limit 100000
set-option -g set-titles on
set-option -g set-titles-string "#{pane_title}"
bind c new-window -c "#{pane_current_path}"
bind "'"split-window -c "#{pane_current_path}"
bind split-window -h -c "#{pane_current_path}"
set-option -s focus-events on
set-option -s extended-keys on
set-option -s escape-time 0

参考资料

posted @ 2025-06-13 21:45  ghimi  阅读(751)  评论(0)    收藏  举报