web-dev-qa-db-ja.com

1つの画面だけがテキストでいっぱいの場合は、猫のように作業を減らしましょう

ここにある私のDebianマシンでは、lessは常に代替画面を開いて内容を表示します。

表示する行が2行または3行しかない場合、これは煩わしいことです。 lessに次のことをお願いします:

  • 画面一杯以上の情報がある場合は、ポケットベルとして機能します

  • ない場合は、catのように機能します。

どうやら、lessには「単一画面」の場合の-Fフラグがあります。

-Fまたは--quit-if-one-screen

ファイル全体を最初の画面に表示できる場合は、lessが自動的に終了します。

しかし、私の場合は再び終了するだけで、情報は表示されません。 cat /dev/nullに似ているため、あまり役に立ちません。

このlessの動作を実現する方法について、誰かアイデアがありますか?

8
Boldewyn

-F-Xと組み合わせると、terminfoの初期化シーケンスが無効になります。

export LESS=-FX

これには、ファイルの長さに関係なく、lessが終了時に表示されたテキストをクリアしないという(不)利点があります。

4
user1686

言及 by grawity のように、これを達成するために-F -Xを渡すことができますが、これはlessがターミナルのスクロールバックに多くのテキストを残すことを意味します( less)のテキストをジャンプすると、順序が正しくない場合もあります。 less-Fのみを渡した場合、何も出力されません 既知の問題#3

代わりに、ラッパースクリプトを使用できます。 git log -Gregexのような遅い入力の場合、次のようにしますか。

A)ラインが入ってくるとメイン画面に表示され、スクロールが必要になったら別の画面に切り替えます(したがって、出力の最初の$LINESは常にスクロールバックに表示されます)。もしそうなら、 同様の質問に対するGillesの回答 の2番目に進みます。

B)代替画面に表示される行。ただし、スクロールが不要であることが判明した場合は、代替画面を終了して行をメイン画面に出力します(したがって、スクロールが必要な場合、スクロールバックに出力は表示されません)。もしそうなら、 同様の質問に対する私の答え を見てください。

3
John Mellor

次のような小さなラッパースクリプトを作成できます。

#!/bin/bash
if (( $(wc -l < "$1") < ${LINES:-20} ))
then
        cat "$1"
else
        less "$1"
fi

これを/usr/local/binまたは~/binless2のようなファイルとして作成する場合(入力を簡単にするためにlのような非常に短い名前を使用することをお勧めします)。 chmod a+x /usr/local/bin/less2で実行可能であることを確認してください。less filenameの形式のコマンド、つまりless2 filename(またはl filename)の場合は、lessの代わりに使用できます。 )。

別のコマンドの出力をlessにパイプしている場合、またはオプションや複数のファイル名を指定している場合、これは機能しません。

定義することにより、追加のスクリプトファイルなしで同じことを行うことが間違いなく可能になります エイリアス 必要に応じて、関数。

2
David Spillett