如何将 tmux 会话中的所有回滚写入文件?
capture-panel
可以抓取当前屏幕,但不能抓取整个回滚。
答案1
对于那些寻找简单答案的人:
- 使用prefix+ :,然后输入
capture-pane -S -3000
+ Return。 (替换-3000
为您想要保存的行数,或替换-
为所有行。)这会将这些行复制到缓冲区中。 - 然后,要将缓冲区保存到文件中,只需再次使用prefix+:并输入
save-buffer filename.txt
+ return。 (默认情况下它会将文件保存在〜/)
(默认Prefix为Ctrl+ 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)。
- 进入选择模式:Prefix+ [。
- 开始选择:Space.
- 使用 vim 导航突出显示必要的文本(例如,使用箭头键或按gg到达输出历史记录的开头)。
- 实际上使用 复制到内部剪贴板中Enter。您将退出复制模式。
- 使用 vim 打开任何文件(可能在新的 tmux 选项卡上)并粘贴您在使用Prefix+之前复制的内容]。
- 然后您可以对该文件执行 cat 操作或根据需要使用输出。