ほとんどの人と同じように、私はless
をターミナルページャーとして使用しています。ときどき、非常に長い行のプレーンテキストまたはマークアップテキストで構成されるファイルを表示します。デフォルトでは、less
foldsこれらの行はターミナルウィンドウのエッジにあります。つまり、最後の列で単語が壊れて、テキストが読みにくくなります。代わりにless
をwrap Word境界の行にする方法はありますか?fmt
またはEmacsビジュアルラインモードと同じ方法ですか?
入力を表示する前にfmt
にパイプするだけでよいことはわかっていますが、そのためには事前に端末の幅を知っておく必要があります。 less
で行を適切に折り返し、ターミナルウィンドウのサイズが変更されたときに自動的に再フォーマットする方法があることを期待していました。
いいえ。確認するには、 最新の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
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.
これについて私が見つけた最良のオプションは、fmtを使用してテキストをフォーマットし、それをlessにパイプすることです。
それはあなたが探しているものを達成します。