web-dev-qa-db-ja.com

fmtのように行の折り返しを少なくすることはできますか?

ほとんどの人と同じように、私はlessをターミナルページャーとして使用しています。ときどき、非常に長い行のプレーンテキストまたはマークアップテキストで構成されるファイルを表示します。デフォルトでは、lessfoldsこれらの行はターミナルウィンドウのエッジにあります。つまり、最後の列で単語が壊れて、テキストが読みにくくなります。代わりにlesswrap Word境界の行にする方法はありますか?fmtまたはEmacsビジュアルラインモードと同じ方法ですか?

入力を表示する前にfmtにパイプするだけでよいことはわかっていますが、そのためには事前に端末の幅を知っておく必要があります。 lessで行を適切に折り返し、ターミナルウィンドウのサイズが変更されたときに自動的に再フォーマットする方法があることを期待していました。

4
Psychonaut

いいえ。確認するには、 最新のlessソース をダウンロードし、178行目あたりのinput.cを確認します。 :

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
1
bishop

less manページ からの抜粋:

-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.
0
dulange

これについて私が見つけた最良のオプションは、fmtを使用してテキストをフォーマットし、それをlessにパイプすることです。

  • fmt ファイル名 |もっと少なく

それはあなたが探しているものを達成します。

0
God