如何在运行的屏幕会话中增加回滚缓冲区?


237

可以说我有一个正在通过腻子与之交互的当前正在运行的屏幕会话。我已经意识到,回滚缓冲区太小,想在启动新的屏幕会话的情况下增加它。

有没有办法做到这一点?


以防万一有人想开始新会话增加回滚缓冲区:screen -h <numlines>
Scz

Answers:


180

手册页说明了可以通过键入运行会话进入命令行模式Ctrl+ A:,然后发出scrollback <num>命令。


4
您必须分别为当前屏幕的每个窗口执行操作。
马修·威尔考克森

2
<num>
回滚

如果您发现达到默认的最大缓冲区不能显示更多历史记录,并且通过设置scrollback <num>,它不再帮助您扩展缓冲区,则需要重做last命令以获取整个历史记录缓冲区。
卡米尔

362

Ctrl-a然后:再键入

scrollback 10000

例如,获得10000行缓冲区。

您还可以通过添加设置默认的回滚行数

defscrollback 10000

到您的~/.screenrc文件。

要滚动(如果您的终端默认情况下不允许您Ctrl-a ESC滚动),请按,然后滚动(Ctrl-f下一页或Ctrl-a上一页使用通常的滚动条,或仅用鼠标滚轮/两指滚动)。要退出滚动模式,只需按ESC

另一个技巧:Ctrl-a i显示您当前的缓冲区设置。


9
defscrollback的提示+1,在Ubuntu 12.10中设置为1024(我必须在工作中使用)。
erik 2014年

2
byobu-screen在Ubuntu 12.04上似乎将defscrollback设置为10000
chronospoon

4
我想指出的是,如果您的screenrc为您打开了其他条款,则需要在打开窗口之前放置defscrollback,否则它们将只获得默认的1024
majikman

在Mac上无法正常工作。我把startup_message off' and 'defscrollback 5000' into my newly created 〜/ .screenrc` 放到第一行,但是第二行似乎被忽略了。

9

在“ putty会话”中启动“ screen”会话时,最小数量的“默认”缓冲区。我在工作中经常使用屏幕,因此我可以告诉您,在“屏幕”会话中您将不会同时使用“屏幕”缓冲区和“ putty”缓冲区。

正确的解决方案是通过添加defscrollback 10000~/.screenrc文件中来设置默认的回滚行数。

顺便说一下,我在./screenrc文件中使用了“ defscrollback 200000” 。


4

正如已经提到的,我们有两种方法!

 每屏幕(会话)交互式设置

它是交互式完成的!并立即生效!

CTRL + A然后:我们输入scrollback 1000000And hitENTER

您脱离了屏幕,然后回来!永远都是一样的。

您打开另一个新屏幕!并且该值再次重置为默认值!因此,这不是一个全局设置!

 和永久默认设置

通过添加defscrollback 1000000.screenrc(在家中)完成

defscrollback而不是scrollback(默认为def)

您需要知道的是是否未创建文件!您创建它

> cd ~ && vim .screenrc

然后添加defscrollback 1000000到它!

或在一个命令中

> echo "defscrollback 1000000" >> .screenrc

(如果尚未创建)

生效

当您将默认值添加到.screenrc!重新连接时已在运行的屏幕将不生效!该.screenrc屏幕创建运行!这很有意义!就像普通的控制台和外壳启动一样!

并且所有新创建的屏幕将具有设置值!

检查屏幕有效缓冲区大小

要检查类型,CTRL + A然后是i

结果将是

在此处输入图片说明

重要的是,缓冲区大小+号后的数字
(在图示中,我将其设置为1 000 000)

还要注意,以交互方式进行更改时!效果是立竿见影的,并接管默认值!

卷动

CTRL+ A接着ESC(进入复印模式)。

然后用导航UpDownPgUp PgDown

然后ESC再次退出该模式。

(其他信息:要复制匹配内容ENTER以开始选择!然后ENTER再次复制!简单又酷)

现在缓冲区更大了!

以上就是重要的细节!


很高兴知道如何滚动的步骤!
6

谢谢。学习了一种新的技巧,可使用以下方法检查屏幕缓冲区的大小:CTRL + A,后跟i
alphaGeek

3

警告:将此值设置得太高可能会导致您的系统遭受严重的打ic。设置的值越高,启动屏幕会话时分配给屏幕进程的虚拟内存越多。我将〜/ .screenrc设置为“ defscrollback 123456789”,并且在启动屏幕时,整个系统冻结了10分钟,然后恢复到可以终止屏幕进程的位置(这消耗了16.6GB届时VIRT mem)。


-3

对于后代,正如史蒂文·卢(Steven Lu)指出的那样,此答案是错误的。但是保留原始文本。

原始答案:

对于那些通过网络搜索到达的人(数年后)...

当使用屏幕时,您的回滚缓冲区是screen前面两个答案已经提到的回滚缓冲区以及腻子回滚缓冲区的组合。

确保同时增加了腻子回滚缓冲区和屏幕回滚缓冲区,否则您的腻子窗口本身将不允许您回滚以查看您screen的回滚历史记录(通过使用在屏幕内滚动来克服ctrl+a->ctrl+u

您可以在设置的“窗口”类别下更改腻子回滚限制。exit根据OP的要求,退出并重新打开屏幕上的腻子会话不会关闭屏幕(假设您只是关闭腻子窗口而不输入)。

希望这有助于确定为什么增加屏幕的回滚缓冲区不能解决某人的问题。


17
这是不准确的。屏幕保留自己的缓冲区。当您使用复制模式在屏幕上向上滚动时,屏幕会通过curses向您提供屏幕的历史记录。当使用屏幕之类的终端多路复用器时,未使用本机终端仿真器的缓冲区(实际上,它可能会或可能不会堆积垃圾作为副作用)
Steven Lu

好点,我相信你是正确的...我想知道我是否应该删除答案?
布莱德·

我不确定。这样一来,也会删除我似乎很喜欢的评论。
史蒂文·卢

3
哈哈,完全正确。我认为我将对其进行编辑以注意它是不正确的,但请保留原始文本
Brad P.

2
好的,谢谢。我确实希望只在此类站点上保留附加更改,以使人们可以远离它而不会感到困惑。
史蒂文·卢
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.