让 less 像 cat 一样工作,如果只有一个屏幕充满文本

让 less 像 cat 一样工作,如果只有一个屏幕充满文本

在我的 Debian 机器上,less总是打开备用屏幕来显示内容。

如果只显示 2 或 3 行,这很烦人。我想less

  • 如果有超过一屏的信息,则可用作寻呼机

  • 并且像那样工作cat,如果没有。

显然,less-F针对“单屏”情况的标志:

-F 或 --quit-if-one-screen

如果整个文件可以在第一个屏幕上显示,则会导致 less 自动退出。

但在我的例子中,它再次退出,没有显示任何信息。它更像是cat /dev/null,因此不是真正有用的。

有人知道如何实现这种less行为吗?

答案1

您可以-F与结合使用-X,以禁用 terminfo 初始化序列。

export LESS=-FX

这样做的(缺点)是less无论文件有多长,退出时都不会清除显示的文本。

答案2

作为提及经过重力,您可以通过 来-F -X实现这一点,但这意味着less将在您的终端回滚中留下大量文本(如果您在 中的文本中跳转,它甚至可能不是按顺序排列的less)。less当您只传递时什么也不输出-F已知问题 #303

相反,您可以使用包装器脚本。对于较慢的输入,例如git log -Gregex,您是否想要:

A)当行进入时,它们出现在主屏幕上,然后在需要滚动时切换到备用屏幕(因此第一个$LINES输出将始终出现在您的回滚中);如果是这样,请使用第二个Gilles 对类似问题的回答

B)行出现在备用屏幕上,但如果滚动变得没有必要,则退出备用屏幕并将行打印到主屏幕(因此,如果需要滚动,则回滚中不会出现任何输出);如果是这样,请查看我对类似问题的回答

答案3

您可以创建一个小的包装脚本,如下所示:

#!/bin/bash
if (( $(wc -l < "$1") < ${LINES:-20} ))
then
        cat "$1"
else
        less "$1"
fi

如果您在/usr/local/bin~/bin中创建一个名为 的文件less2(您可能希望使用一个非常短的名称l以便于输入),并确保它可以使用 执行chmod a+x /usr/local/bin/less2,则可以使用它代替less形式的命令,即(或)。less filenameless2 filenamel filename

less如果您通过管道传输另一个命令的输出,或者指定选项或多个文件名,则这将不起作用。

如果您愿意的话,毫无疑问可以通过定义函数别名来做同样的事情,而不需要额外的脚本文件。

相关内容