有没有办法让“less”截断行并在 < 1 个屏幕后仍然退出?

有没有办法让“less”截断行并在 < 1 个屏幕后仍然退出?

像许多(大多数)一样,我使用 git,它默认将其输出(用于差异、日志等)发送到less,并带有选项-FRSX。通过设置要使用覆盖选项调用的寻呼机,可以在 .gitconfig 中覆盖这些选项。例如:

  pager=less -F -+S

当我设置less在输出少于一屏后退出时不是截断行(即less -F -+S如上面的示例所示),在运行(比如说)命令后,我会自动返回到命令提示符log

然而,如果我让它砍线(即仅使用less -F),并且任何行都会被截断,那么当它结束时,它立即退出,但打印END并等待我按Q,这有点烦人。

(请注意,有问题的行为确实不是如果没有行被截断,就会发生这种情况,因为它们都比我的终端窄。问题没有发生,因为它是截断行,但它实际上是这样做的。)

有没有办法截线并less在不到一个屏幕后仍然自动退出?

答案1

嗯...这违背了分页的想法...不是吗? :-)

但回答你的问题:我很确定没有。这是来自less的源代码:

/*
 * The char won't fit in the line; the line
 * is too long to print in the screen width.
 * End the line here.
 */
if (chopline || hshift > 0)  <--- you have chop lines (-S)
{
        ...
        quit_if_one_screen = FALSE;    <--- this resets -F
}

对不起 :-)

答案2

由于当任何行被 截断时less会有效地禁用,因此您无法单独解决此问题。一种替代方法是截断行--quit-if-one-screenchop-long-linesless将它们传递给 less。像这样的东西:

pager = "cut -c -512 | less --quit-if-one-screen"

或者,如果您想让它根据您的终端宽度而变化:

pager = "cut -c -$COLUMNS | less --quit-if-one-screen"

相关内容