如何让 less -S 不占据整个屏幕

如何让 less -S 不占据整个屏幕

假设我有这个:cat new_file.txt | less -FRSX

然后假设我按下右侧按钮以向右滚动

这将导致 new_file.txt 的内容移动到命令行顶部,而且 new_file.txt 的内容和当前命令之间有一大堆空白空间

例如,它看起来像这样

contentsofnewfile.txtyupmorecontenntsconteeentsss
~
~
~
~
~
~
~
~
.
.
.
~
(END)

我该如何做到这一点,以便即使我按下右侧按钮,文件的内容也保留在原来的位置而不是移动到顶部(尽管它仍然应该滚动到右侧),而且不会有空行,例如作为

~
~
~

上面显示

答案1

(我不敢相信我是 8 年来世界上第二个遇到同样问题的人,也是 Unix/Linux 使用历史上的第二个人)

分析

  • less有类似的东西吗more -c?是的-c,那里有功能。
  • less有类似的东西吗more -20?是的-z 20,但它坏了(见下面的报价)。
  • 有效吗less --window=-5?是的,但不像预期的那样,它坏了(见下面的报价)。
  • 是否LINES=5 less --window=5按预期工作?不,它坏了(见下面的引用)。
  • less -c -5功能类似吗more -c -5?仅当(在本例中)有 5 行或更少时,没有按键被按下。
  • 是否less -F做你想要的(OP)屏幕上有足够的字符空间吗?是的。

-5 -z5 -z 5 --window=5功能上都是等价的。

如果-z是的话不是像手册上说的那样工作:

z为了与某些版本的兼容性,可以省略。

...然后呢它做什么?

结论

--window=现在仅有的设置一个根据向前滚动/向后滚动页面大小--max-forw-scroll(和 的基数--max-back-scroll),不是视图窗口的大小

为什么它会这样运作?好吧,当-z第一次添加时(它仍然是README一个功能),它可能做了工作就像“更多的某些版本”一样。但大约在同一时间,他们引入了下一个引用中提到的代码,该代码损坏了-z,并且出于某种原因,每个人都认为这是一件好事(因为它从未被修复,甚至未被标记)。

(冗长的)手册页中有一段内容就在底部附近

环境变量

COLUMNS

设置屏幕上的列数。优先于TERM变量指定的列数。 (但是如果您有一个支持TIOCGWINSZ或 的窗口系统WIOCGETD,则窗口系统对屏幕尺寸的理解优先于LINESCOLUMNS环境变量。)

LINES是有问题的变量,它正在影响OP(和我)。

less -5与 相比,预期的功能是什么more -5?它的功能应该相同,正如Compatibility With More手册中的 ( ) 部分所暗示的那样,您可以使用lessas more(并且我已经使用了执行此操作的系统)。

如果程序是通过名为“more”的文件链接调用的,则 less 的行为(大部分)符合 POSIX more 命令规范。

我敢打赌 POSIX 规范对当前的-z实现存在争议。

期望它能工作一次,因为较少的增强是提供消极的值,其工作原理基于底部屏幕的。

我认为这就是它搞砸的地方,当时没有足够的测试和用例,并且实现它的人不是实现新的“动态窗口值”的同一个人。

我已经打开了最新的资源,明天我会看一下。

答案2

做一个cat new_file.txt | less -FRSXc.这解决了第一个问题。

对于第二个问题,请使用波浪号cat new_file.txt | less -FRSXc~

从手册页中可以看到:

-c 或 --clear-screen 使全屏重绘从顶行向下绘制。默认情况下,全屏重绘是通过从屏幕底部滚动完成的。

-~ 或 --tilde 通常文件末尾之后的行显示为单个波形符 (~)。此选项导致文件末尾之后的行显示为空行。

相关内容