像大多数人一样,我less
用作终端寻呼机。有时,我查看由很长的纯文本或标记文本行组成的文件。默认情况下,less
将这些行在终端窗口边缘折叠。也就是说,单词在最后一列打乱了,使文本难以阅读。有没有得到什么办法less
,而不是包裹在字边界,该线相同的方式,fmt
或Emacs视线模式呢?
我知道我可以fmt
在查看之前简单地通过管道输入,尽管这需要我提前知道终端宽度。我希望有一些方法less
可以很好地包装行,并在调整终端窗口大小时自动重新格式化它们。
像大多数人一样,我less
用作终端寻呼机。有时,我查看由很长的纯文本或标记文本行组成的文件。默认情况下,less
将这些行在终端窗口边缘折叠。也就是说,单词在最后一列打乱了,使文本难以阅读。有没有得到什么办法less
,而不是包裹在字边界,该线相同的方式,fmt
或Emacs视线模式呢?
我知道我可以fmt
在查看之前简单地通过管道输入,尽管这需要我提前知道终端宽度。我希望有一些方法less
可以很好地包装行,并在调整终端窗口大小时自动重新格式化它们。
Answers:
否。要进行验证,请下载最新的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)很奇怪,因此,它可能不是很好的通用方法。
man
less -is
默认情况下使用哪个IMO很好,但不是您想要的。
所以...我认为,唯一的办法是,尽管不承认终端大小会改变:
fmt -w $(tput cols) | less
摘录自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.