在我的 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 filename
less2 filename
l filename
less
如果您通过管道传输另一个命令的输出,或者指定选项或多个文件名,则这将不起作用。
如果您愿意的话,毫无疑问可以通过定义函数别名来做同样的事情,而不需要额外的脚本文件。