你能以交互方式修改“less”中的终端重置吗?

你能以交互方式修改“less”中的终端重置吗?

我通常不想在退出时重置终端less(也就是说,我希望屏幕继续显示我正在查看的内容)。通常,当我在一个新盒子上并且尚未配置它时,我会调用less,退出,看到屏幕重置,温和地诅咒,然后重新运行less -X ... 在极少数情况下,我记得屏幕将尽快重置当我退出时,在这种情况下,事件的顺序会稍微修改,并且在我退出之前会发生轻微的咒骂,但总体效果大致相同。

有没有办法修改当前正在运行的less进程,使其在退出时不会重置终端?

答案1

某些终端(例如 xterm)具有启用/禁用切换到备用屏幕或从备用屏幕切换的菜单设置。大多数不...

顺便说一下(一些/大多数的相同问题),如果终端实现了原始的 xterm 47代码备用屏幕切换,可以切换回备用屏幕而不清除它。我注意到有些集合TERM=xterm没有实现这一点(仅实现了后面的1049代码) -ymmv

您可以看到如何47通过查看代码在普通终端描述中使用smcuprmcup能力来自

infocmp xterm-old

其中显示了这些项目(除其他外):

rmcup=\E[2J\E[?47l\E8,
smcup=\E7\E[?47h,

\E[2Jrmcup在切换回正常屏幕之前清除(备用)屏幕。这\E7\E8保存/恢复光标位置(对于正常屏幕)。如果你真的通缉到,你可以用任何东西替换这些功能xterm- 兼容终端描述,省略清屏部分,让您可以做

tput smcup
tput rmcup

从命令行并查看备用屏幕上的内容。这不太好(因为你的命令行会覆盖它的一部分),但它可能会有所帮助。

在 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大多数程序使用。

相关内容