capture-panel
可以捕获当前屏幕,但不能捕获整个回滚。#1 楼
这取决于您在history-limit
中设置的.tmux.conf
的值-默认值为2000;默认值为2000。如果要捕获更多内容,则需要显式设置行数。要捕获整个滚动,请进入复制模式,选择整个滚动,然后将其拉入缓冲区,然后粘贴将其保存到文件中。
如何完成此操作取决于您喜欢的vi或emacs
mode-keys
选项。 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:将其拉入缓冲区
前缀:打开另一个tmux窗口
vim scrollback.txt
i:在vim中进入插入模式
前缀:粘贴到文件中
这里还有一个答案,描述了如何使用可能有用的
xsel
将缓冲区复制到临时文件。#2 楼
对于寻求简单答案的用户,只需使用前缀+:,然后键入capture-pane -S -3000
+ return(将3000
替换为要保存的行数)。这会将这些行复制到缓冲区中。然后,要将缓冲区保存到文件,只需再次使用前缀+:,然后键入
save-buffer filename.txt
+ return,将filename
替换为您想要的任何内容。 (默认前缀为ctrl + b。)
评论
save-buffer filename.txt似乎将文件保存在/中,而不是pwd(当前目录)中。取而代之的是,我提供了一个绝对的文件路径,它的工作原理就像一个魅力
– MohamedEzz
16 Dec 8'在9:54
并且不要忘记在您想要保存的《缓冲行数》前面的减号
–约旦·格奥尔基耶夫(Yordan Georgiev)
16 Dec 23'在12:46
这是最好的答案。非常感谢。
–杰西·阿特金森(Jesse Atkinson)
17年4月21日在21:22
是的,你赢了。这应该是最佳答案。
–明智的话
17年6月6日19:39
+ n> 1登录以进行投票后,这似乎至少是第二次此答案对我有帮助。 XD
– L0j1k
19 Mar 28 '19在3:01
#3 楼
在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版本不接受-S捕获窗格(它似乎是1.3-2,尽管它来自dpkg,因为我不知道如何获取tmux来显示版本数…)
– David Wolever
2011年12月12日下午5:40
您可能正在运行tmux 1.3。您可能可以使用tmux服务器信息|头-1查看您的版本。 tmux -V在tmux * 1.4及更高版本中有效。
–克里斯·约翰森(Chris Johnsen)
2011年12月12日上午8:03
这是迄今为止我发现的最有用的tmux命令之一。
–肯尼
2012年7月19日在19:03
如果您已经在tmux窗口中并且不想重新启动,则只需执行[PrefixKey]即可:进入tmux命令行,然后粘贴整行,然后只需执行[Prefix] P就可以了P,你很好。
–阿里
2013年12月17日在21:43
是否可以自动生成tmux缓冲文件的文件名而不是提示输入?因此,您运行快捷方式的所有内容都会保存到另一个文件,例如,当前时间在文件名中。
–user779159
17年9月16日在12:44
#4 楼
如果您希望可以从命令行运行某些内容(而不是使用tmux前缀键),请尝试运行:tmux capture-pane -pS -1000000
如果运行它,但似乎不行做任何事情,这是因为它输出的恰好是屏幕上的内容,因此看起来是一样的。
当然,您也可以将其通过管道传输到文件中:
tmux capture-pane -pS -1000000 > file.out
请参见
tmux
手册页,并搜索capture-pane
,以了解更多您可以做的事情(例如,捕获转义序列以防保留颜色,或者指定是否要在不合并时合并多个视线)没有换行)评论
这非常有帮助,尤其是因为已接受的答案不再起作用。
– piojo
19年1月16日在7:22
-p参数输出到stdout而不是tmux缓冲区。
–palswim
19年12月1日在6:24
如果您不在本地控制台中,那么它将无法正常工作,因此我尝试了以下操作:1)在本地外壳下面的水平窗格下面添加2)tmux capture-pane -t {top} -pS -1000>〜/ tmp.out
–副词
20 Jul 27 '13:57
#5 楼
我有标准的按键绑定,似乎与@jasonwryan的答案有些不同,并且在配置中没有任何更改。以下是对我有用的食谱。如果您不想在tmux配置中进行任何更改,而只是想快速复制一些回滚,也许您会发现它很有用。
前缀== Ctrl + b在我的tmux中(tmux 1.6 ,debian 7)。
进入选择模式:前缀+ [。
开始选择:空格。
使用vim导航突出显示必要的文本(例如,使用arrow键或按gg到达输出历史记录的开头。
实际上使用Enter键将其复制到内部剪贴板中。您将退出复制模式。
使用vim打开任何文件(可能在新的tmux选项卡上),然后粘贴您复制的内容,然后再使用Prefix +]。
那么您可以处理该文件或使用输出您的需求。
评论
man tmux帮助我弄清了tmux处于emacs模式,因此上述键绑定均无效。 man tmux再次帮助我弄清楚了要使用的内容。但是我犯的最大错误是,我从中保存内容的主机不是我从中运行tmux的主机,因此我一直在错误的主机上寻找保存的文件...
– Cognitiaclaves
17年8月4日在1:29
#6 楼
这是一个启用此功能的tmux插件:https://github.com/tmux-plugins/tmux-logging
安装后,请使用
prefix + alt-shift-p
保存整个回滚。#7 楼
这实际上非常容易。按
prefix key
然后按:
进入命令模式。然后执行
capture-pane -S -<line number you want to dump>
然后
save-buffer <filepath>
该文件包含所有回滚输出。为了安全起见,之后应删除缓冲区。
#8 楼
如何将tmux会话中的所有回滚写入文件?
我在〜/ .tmux.conf中使用它,现在退出运行时外壳程序,将窗格输出保存到唯一的日志文件中:
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'
#9 楼
如何在tmux会话中将所有回滚都写入文件?从手册中:
‘-’ to -S is the start of the history
。所以
tmux capture-pane -pS - > file
这将“在tmux中写入所有回滚”窗格。
对于会话中的所有窗格,您可以尝试使用
tmux list-panes -s ...
遍历所有窗格如果需要的话,我可能会更新此答案。
评论
这个。到底谁想与回滚行号相符?真浪费时间。只需转储所有内容,然后在您喜欢的文本编辑器/ gnu命令中使用合理的UI,将输出文件切片/切成小块,就容易得多。
– ijoseph
20 Sep 13'4:53
#10 楼
转储到文件并在vim
中自动打开文件这很不错:
bind-key v 'capture-pane' \; \
capture-pane -S - \; \
save-buffer /tmp/tmux \; \
delete-buffer \; \
send-keys Escape 'ddivim /tmp/tmux' Enter
它假设您的shell处于vi模式,因此:
转义进入普通模式
dd
清除所有现有命令i
进入插入模式然后我们运行
vim /tmp/tmux
在tmux 3.0中进行了测试。
评论
充其量是有问题的……在Vim中粘贴到插入模式会遇到各种问题,例如启用自动缩进时。我从来没有让我满意的工作。
–康拉德·鲁道夫(Konrad Rudolph)
15年1月21日在16:19
如果在vim中使用:set paste,vim将忽略添加自动缩进或任何基于插入的键绑定。
–小家伙
15年2月4日在21:18
@tlunter小贴士!
– Jasonwryan
15年2月4日在23:10
可以使用默认键绑定来完成此操作吗?
–daveloyall
2015年11月5日17:00
@daveloyall当然,只是不要使用我从.tmux.conf中包含的keybind选项。
– Jasonwryan
2015年11月5日17:14