Answers:
这取决于history-limit
您在中设置的值.tmux.conf
-默认值为2000;默认值为2000。如果您希望捕获更多行,则需要显式设置行数。
要捕获整个回滚,请进入复制模式,选择整个回滚,然后将其拉到缓冲区中,然后将其粘贴到文件中。
如何完成此操作将取决于mode-keys
您喜欢的选项vi还是emacs。man tmux
有一个有用的表格,描述了各个按键。
.tmux.conf
为了简化这一点,我准备了以下内容:
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
捕获完整回滚的过程如下:
PrefixEsc :进入复印模式
v :开始视觉选择(假设您已经在屏幕底部)
gg :捕获回滚中的所有内容
y :将其拉入缓冲区
Prefixc :打开另一个tmux窗口
vim scrollback.txt
i :在vim中进入插入模式
Prefixp :粘贴到文件中
这里还有一个答案,描述了如何使用缓冲区将缓冲区复制到临时文件xsel
,这可能会很有用。
:set paste
在vim中使用,vim将忽略添加自动缩进或任何基于插入的键绑定。
.tmux.conf
...
对于寻找简单答案的用户,只需使用prefix+ :,然后输入capture-pane -S -3000
+ return(用3000
您想保存的行替换掉即可。)这会将这些行复制到缓冲区中。
然后,要将缓冲区保存到文件,只需再次使用prefix+ :,然后输入save-buffer filename.txt
+ return,替换filename
为您想要的任何内容。
(默认prefix为ctrl + b。)
save-buffer filename.txt
似乎将文件保存在中/
,而不是保存在pwd
(当前目录)中。取而代之的是,我提供了一个绝对的文件路径,它的工作
在tmux 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行历史记录以及当前显示的行。从tmux 1.6 开始,如果窗格的历史记录深于32Ki行(通常最多2Gi行),则可以使用低至INT_MIN的数字。从tmux 2.0 开始,您可以用capture-pane -S -
“开始于历史的开始”来表示(即,没有大的,硬编码的负数)。
注意:已保存文件中的行数并不总是等于窗格的历史记录限制及其高度。
当窗格的历史记录缓冲区已满时,tmux丢弃最旧的10%的行,而不是仅丢弃一行。这意味着窗格的有效历史记录深度有时会低至其配置限制的90%。
tmux server-info | head -1
用来查看您的版本。tmux -V
在tmux * 1.4及更高版本中工作。
[PrefixKey] :
即可进入tmux命令行,然后粘贴整行,那么您只需要执行a [Prefix] P
,即为大写P,就可以了。
我有标准的按键绑定,似乎与@jasonwryan的答案有些不同,并且在配置中没有任何更改。
以下是对我有用的食谱。如果您不想在tmux配置中进行任何更改,而只是想快速复制一些回滚,您可能会发现它很有用。
Prefix== Ctrl+b在我的tmux(tmux 1.6,debian 7)中。
如果需要某些内容,可以从命令行运行(而不是使用tmux前缀键),请尝试运行:
tmux capture-pane -pS -1000000
如果您运行它,但似乎什么也没做,那是因为它输出的恰好是屏幕上显示的内容,因此看起来一样。
当然,您也可以将其传送到文件中:
tmux capture-pane -pS -1000000 > file.out
请参见tmux
手册页并搜索capture-pane
更多您可以做的事情(例如,捕获转义序列以防保留颜色,或者指定是否希望在不包含新行的情况下合并多条视觉行)
如何将tmux会话中的所有回滚写入文件?
我在〜/ .tmux.conf中使用它,现在当我退出正在运行的shell时,窗格输出将保存到唯一的日志文件中:
set -g remain-on-exit
set-hook pane-died 'capture-pane -S - -E - ; save-buffer "$HOME/logs/tmux/tmux-saved.#{host_short}-#{session_id}:#{window_id}:#{pane_id}-#{pane_pid}-#{client_activity}.log"; delete-buffer; kill-pane'