可以像fmt那样少换行吗?

Psy*_*aut 6 linux gnu command-line less

像大多数人一样,我将less其用作终端寻呼机。有时,我会查看由很长的纯文本或标记文本行组成的文件。默认情况下,这些线会在终端窗口边缘less 折叠。也就是说,最后一列的单词被破​​坏,导致文本难以阅读。有没有什么方法可以在字边界less换行fmt,就像 Emacs 视觉行模式一样?

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

bis*_*hop 2

否。要进行验证,请下载最新的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
Run Code Online (Sandbox Code Playgroud)

从性能角度来看,以这种方式进行格式化fmt并不简单。该fmt算法大约向前和向后扫描50行以获得最优布局。此外,fmt如果您想要的宽度明显大于实际内容,则该算法看起来(IMO)很奇怪,因此它可能不太适合一般情况。

man默认情况下使用less -isIMO 相当不错,但不是您想要的。

所以......我认为唯一的方法,虽然不可否认它不遵循终端大小调整,是:

fmt -w $(tput cols) | less
Run Code Online (Sandbox Code Playgroud)