可以像fmt那样减少换行吗?


4

像大多数人一样,我less用作终端寻呼机。有时,我查看由很长的纯文本或标记文本行组成的文件。默认情况下,less 这些行在终端窗口边缘折叠。也就是说,单词在最后一列打乱了,使文本难以阅读。有没有得到什么办法less,而不是包裹在字边界,该线相同的方式,fmt或Emacs视线模式呢?

我知道我可以fmt在查看之前简单地通过管道输入,尽管这需要我提前知道终端宽度。我希望有一些方法less可以很好地包装行,并在调整终端窗口大小时自动重新格式化它们。

Answers:


1

否。要进行验证,请下载最新的less资源input.c在178行附近进行查看:

177             /*
178              * The char won't fit in the line; the line
179              * is too long to print in the screen width.
180              * End the line here.
181              */
182             if (chopline || hshift > 0)
183             {
184                 do
185                 {
186                     if (ABORT_SIGS())
187                     {
188                         null_line();
189                         return (NULL_POSITION);
190                     }
191                     c = ch_forw_get();
192                 } while (c != '\n' && c != EOI);
193                 new_pos = ch_tell();
194                 endline = TRUE;
195                 quit_if_one_screen = FALSE;
196             } else

以这种方式进行格式化在fmt性能上是不平凡的。该fmt算法大约需要50行正向和反向扫描以获得最佳布局。另外,fmt如果所需宽度明显大于实际内容,则该算法看起来(IMO)很奇怪,因此,它可能不是很好的通用方法。

manless -is默认情况下使用哪个IMO很好,但不是您想要的。

所以...我认为,唯一的办法是,尽管不承认终端大小会改变:

fmt -w $(tput cols) | less

0

摘录自less手册页

-S or --chop-long-lines
    Causes lines longer than the screen width to be chopped rather than folded.
    That is, the portion of a long line that does not fit in the screen width
    is not shown. The default is to fold long lines; that is, display the
    remainder on the next line.

恐怕这不能回答我的问题。我希望将行包裹在单词边界处,而不是切碎或折叠。
Psychonaut 2014年

0

我为此找到的最佳选择是使用fmt格式化文本并将其通过管道传递到更少的文本中。

  • fmt 文件名 | 减

那将实现您想要的。


2
在问题中,Psychonaut说他知道这是一个选择。如果您说这是知道如何做的唯一方法,那并不是真正有用的答案。您说“我为此找到的最佳选择是...。”如果您描述了至少一个其他选择,则可以使您的答案更有价值。
G-Man
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.