假设我有这个: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
,则窗口系统对屏幕尺寸的理解优先于LINES
和COLUMNS
环境变量。)
LINES
是有问题的变量,它正在影响OP(和我)。
less -5
与 相比,预期的功能是什么more -5
?它的功能应该相同,正如Compatibility With More
手册中的 ( ) 部分所暗示的那样,您可以使用less
as more
(并且我已经使用了执行此操作的系统)。
如果程序是通过名为“more”的文件链接调用的,则 less 的行为(大部分)符合 POSIX more 命令规范。
我敢打赌 POSIX 规范对当前的-z
实现存在争议。
我期望它能工作一次,因为较少的增强是提供消极的值,其工作原理基于底部屏幕的。
我认为这就是它搞砸的地方,当时没有足够的测试和用例,并且实现它的人不是实现新的“动态窗口值”的同一个人。
我已经打开了最新的资源,明天我会看一下。
答案2
做一个cat new_file.txt | less -FRSXc
.这解决了第一个问题。
对于第二个问题,请使用波浪号cat new_file.txt | less -FRSXc~
从手册页中可以看到:
-c 或 --clear-screen 使全屏重绘从顶行向下绘制。默认情况下,全屏重绘是通过从屏幕底部滚动完成的。
-~ 或 --tilde 通常文件末尾之后的行显示为单个波形符 (~)。此选项导致文件末尾之后的行显示为空行。