有没有办法在不清除屏幕的情况下退出“less”?

有没有办法在不清除屏幕的情况下退出“less”?

相对经常地,我发现自己想退出less,但留下我在屏幕上看到的内容,以供回看。有什么办法可以做到这一点吗?解决方法?

(我当前的解决方法是退出,然后使用more。因此任何比这更好的解决方法都受到欢迎。理想的情况是我一旦进入 ,就可以使用它less,也许可以通过 shell 设置或一些脚本编写。)

我的桌面是 OSX,但我使用 RHEL 和 Ubuntu 服务器。

答案1

这实际上是您正在使用的终端仿真器(xterm、gnome-terminal、konsole、screen)的一个功能。当调用less或等程序时,会启动备用屏幕或替代屏幕vim。此替代屏幕没有历史记录缓冲区,当您退出程序时会立即退出,切换回原始屏幕,从而恢复以前的窗口内容历史记录和位置。

您可以less通过传递参数“-X”来阻止在替代屏幕中启动。

less -X /path/to/some/file

您还可以传递“-X”作为环境变量。因此,如果您正在使用bash,请将其放入~/.bashrc

export LESS="-X"

但是,这会禁用 termcap(终端功能)初始化和取消初始化,因此您使用时的其他视图less可能会显示为关闭。

screen另一种选择是altscreen off在您的~/.screenrc.less不会清除屏幕并应保留颜色格式。想必tmux也会有同样的选择。

博客条目描述问题并提供一些不同的解决方案,并gnome-terminal取得了不同的成功。

答案2

我记得这是less -SEX当我需要将输出转储到屏幕但不希望换行时。例如,docker ps | less -SEX它的作用是这样的:

  • -S
    • 滚动而不是换行
    • 如果放下-E,您可以使用箭头键滚动
  • -E
    • 到达 EOF 时退出
  • -X
    • 防止术语交换/空白
    • “记忆”部分是我知道S和E是做什么的,所以这一定是另一部分。 (我们将此命令提交到内存的原因是我们想要转储(而不是进入交互式会话)未包装的输出。

如果你不记得了less -SEX,你就没有太大希望。每次我猜的时候就重新谷歌一下。

答案3

乔治的解决方案对我不起作用,但这个解决方案确实有效(来自博客条目在他的回答中链接)。

  1. $ infocmp -I xterm > ~/xterm-noclear.src

  2. 编辑 ~/xterm-noclear.src

    • 将第二行的名称从“xterm”更改为“xterm-noclear”,或任何适合您的名称(如果存在“xterm-debian”,也将其更改)

    • 删除指令“smcup”和“rmcup”(例如“smcup=\E[?1049h,”和“rmcup=\E[?1049l,”)

  3. $ mkdir ~/.terminfo

  4. $ tic ~/xterm-noclear.src(x/xterm-noclear 应该出现在您的 ~/.terminfo 目录中)

  5. $ export TERM=xterm-noclear(现在检查 less 的行为,如果满意,请将导出指令行添加到您的 ~/.profile 中)

(我直接从 @jah 拒绝编辑的 George 答案中复制了这些说明。)

答案4

有一个更简单的方法。只需将命令传递给“cat”命令

less blah.txt|cat 

它不仅适用于“less”,还适用于其他类似的命令,这些命令创建一个“新”终端来打印输出(例如 git log)

相关内容