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

Ste*_*ett 92 less termcap

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

(我目前的解决方法是退出,然后使用more。所以任何比这更好的解决方法都是受欢迎的。理想的是我已经在里面后可以使用的东西less,也许有一个 shell 设置或一些脚本。)

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

Geo*_*e M 90

这实际上是您使用的终端仿真器的功能(xterm、gnome-terminal、konsole、screen)。当诸如less或 之vim类的程序被调用时,会启动备用屏幕或 altscreen 。这个 altscreen 没有历史缓冲区,当你退出程序时会立即退出,切换回原始屏幕,恢复以前的窗口内容历史和位置。

您可以less通过传递参数“-X”来防止在 altscreen 中启动。

less -X /path/to/some/file

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

export LESS="-X"
Run Code Online (Sandbox Code Playgroud)

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

另一种选择是使用screen和设置选项altscreen off在你的~/.screenrcless不会清除屏幕并应保留颜色格式。大概tmux会有同样的选择。

博客条目描述了该问题并提供了一些特定于gnome-terminal不同成功率的不同解决方案。

  • 实际上,`git` 将 `LESS` 变量设置为 `FRSX`,如果它在运行分页器时未设置,那么你可以不设置 `LESS`,`less` 将自动使用 `-FRSX` 运行。在 `git-config(1)` 中查找 `core.pager` 以获取更多信息。 (6认同)
  • 嘿,我想我刚刚发现了上面 `git log` 问题的解药:`export LESS="-r -X"`。(不知道*那个*的副作用是什么......) (4认同)
  • 完美的。有什么缺点吗? (2认同)
  • 等等,我已经发现了一个 - `git log`(可能还有其他彩色命令)的输出搞砸了。 (2认同)

Bru*_*sky 16

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

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

如果你记不住less -SEX,那你就没有多大希望了。每次我猜都​​重新谷歌。

  • 这家伙有问题,你给他少做爱? (10认同)

小智 6

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

  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 的行为,如果满意,将 export 指令行添加到您的 ~/.profile)

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