将所有 tmux 回滚写入文件

将所有 tmux 回滚写入文件

如何将 tmux 会话中的所有回滚写入文件?

capture-panel 可以抓取当前屏幕,但不能抓取整个回滚。

答案1

对于那些寻找简单答案的人:

  1. 使用prefix+ :,然后输入capture-pane -S -3000+ Return。 (替换-3000为您想要保存的行数,或替换-为所有行。)这会将这些行复制到缓冲区中。
  2. 然后,要将缓冲区保存到文件中,只需再次使用prefix+:并输入save-buffer filename.txt+ return。 (默认情况下它会将文件保存在〜/)

(默认PrefixCtrl+ B。)

答案2

多路复用器1.5、capture-pane命令接受-S-E指定捕获的起始行和结束行;负值可用于指定历史记录中的行。一旦缓冲区中有数据,您就可以使用save-buffer.

下面是一个示例绑定(适用于.tmux.conf),它通过提示输入文件名将其全部包装起来:

bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

这将捕获(最多)32768 行历史记录加上当前显示的行。从...开始多路复用器1.6 中,如果您的窗格具有比 32Ki 行(通常最多 2Gi 行)更深的历史记录,则可以使用低至 INT_MIN 的数字。开始于多路复用器2.0,您可以用来capture-pane -S -表示“从历史的开端开始”(即没有大的、硬编码的负数)。


注意:保存的文件中的行数并不总是等于窗格的历史记录限制加上其高度。

当窗格的历史缓冲区已满时,多路复用器丢弃最旧的 10% 的行,而不是只丢弃一行。这意味着窗格的有效历史记录深度有时会低至其配置限制的 90%。

答案3

如果您想要可以从命令行运行的东西(而不是使用 tmux 前缀键),请尝试运行:

tmux capture-pane -pS -1000000

如果你运行它并且它似乎没有做任何事情,那是因为它输出的正是屏幕上的内容,所以看起来是一样的。

当然,您也可以将其传输到文件中:

tmux capture-pane -pS -1000000 > file.out

请参阅tmux手册页并搜索capture-pane更多可以执行的操作(例如捕获转义序列,以防您想要保留颜色,或者指定是否希望在多个视觉线不包含新行时将其连接起来)

答案4

我有标准的键绑定,这似乎与@jasonwryan 的回答并且没有改变配置中的任何内容。

下面是对我有用的食谱。如果您不想对 tmux 配置进行任何更改而只想快速复制一些回滚,也许您会发现它很有用。

Prefix==Ctrl+b在我的 tmux 中(tmux 1.6,debian 7)。

  1. 进入选择模式:Prefix+ [
  2. 开始选择:Space.
  3. 使用 vim 导航突出显示必要的文本(例如,使用箭头键或按gg到达输出历史记录的开头)。
  4. 实际上使用 复制到内部剪贴板中Enter。您将退出复制模式。
  5. 使用 vim 打开任何文件(可能在新的 tmux 选项卡上)并粘贴您在使用Prefix+之前复制的内容]
  6. 然后您可以对该文件执行 cat 操作或根据需要使用输出。

相关内容