我通常不想在退出时重置终端less
(也就是说,我希望屏幕继续显示我正在查看的内容)。通常,当我在一个新盒子上并且尚未配置它时,我会调用less
,退出,看到屏幕重置,温和地诅咒,然后重新运行less -X ...
在极少数情况下,我记得屏幕将尽快重置当我退出时,在这种情况下,事件的顺序会稍微修改,并且在我退出之前会发生轻微的咒骂,但总体效果大致相同。
有没有办法修改当前正在运行的less
进程,使其在退出时不会重置终端?
答案1
某些终端(例如 xterm)具有启用/禁用切换到备用屏幕或从备用屏幕切换的菜单设置。大多数不...
顺便说一下(一些/大多数的相同问题),如果终端实现了原始的 xterm 47
代码备用屏幕切换,可以切换回备用屏幕而不清除它。我注意到有些集合TERM=xterm
没有实现这一点(仅实现了后面的1049
代码) -ymmv
您可以看到如何47
通过查看代码在普通终端描述中使用smcup
和rmcup
能力来自
infocmp xterm-old
其中显示了这些项目(除其他外):
rmcup=\E[2J\E[?47l\E8,
smcup=\E7\E[?47h,
这\E[2J
在rmcup
在切换回正常屏幕之前清除(备用)屏幕。这\E7
和\E8
保存/恢复光标位置(对于正常屏幕)。如果你真的通缉到,你可以用任何东西替换这些功能xterm- 兼容终端描述,省略清屏部分,让您可以做
tput smcup
tput rmcup
从命令行并查看备用屏幕上的内容。这不太好(因为你的命令行会覆盖它的一部分),但它可能会有所帮助。
在 xterm 中不需要它,因为 xterm 有一个用于来回切换的菜单选项。但您可能会发现这种方法很有用。
进一步阅读:
- 为什么运行 vi 时屏幕不清除?(xterm 常见问题解答)
- XTerm 控制序列
答案2
使用| . cat
。
逐步:按|
,然后在|mark:
提示符处按.
,然后在!
提示符处输入cat
,然后在|done (press RETURN)
提示符处再次按 Enter;当您退出时less
,当前页面将保留在屏幕上。
如果您希望按原样处理输出less
(将退格键+下划线转换为下划线,不可打印字符显示为<XX>
等),请使用less -FX
代替cat
。
从less(1)
联机帮助页:
| <m> shell-command <m> represents any mark letter. Pipes a section of the input file to the given shell command. The section of the file to be piped is between the first line on the current screen and the position marked by the letter. <m> may also be ^ or $ to indi- cate beginning or end of file respectively. If <m> is . or new- line, the current screen is piped.
之后,如果您想简单地切换rmcup
/smcup
备用屏幕切换,而不必一次又一次地重新配置每个 xterm 克隆,您可以使用以下命令:
infocmp | sed 's/[sr]mcup=[^=]*,//g' | tic -
这将写入~/.terminfo
当前终端的终端描述,并省略备用屏幕切换的代码。它应该优先于/usr/share/terminfo
大多数程序使用。