終了時にgit log
またはgit diff
で画面をクリアしたい。 this の指示に従い、export LESS="FR"
を。bashrcに追加したので、git
はlessコマンドにX
オプションを追加しないでください( pager config を参照)。 git log
またはgit log -10
を実行すると、期待どおりに機能します。
しかし、git log -6
(またはそれ以下)を実行するとすぐに何も出力されなくなります。その理由はquit-if-one-screen
モードのようです。しかし、なぜこれが起こるのか理解できません。
tl; dr
なぜこれが起こるのか分かりません
less
なしのX
は、代替画面を使用してその出力を表示します。 F
が原因ですぐに終了した場合、代替画面は非常に短時間(存在する場合)表示され、事実上、出力がまったくないかのように表示されます。
man 1 less
の関連フラグメント(私のDebian 9で)
-F
または--quit-if-one-screen
ファイル全体を最初の画面に表示できる場合は、less
が自動的に終了します。
-X
または--no-init
termcapの初期化および非初期化文字列を端末に送信することを無効にします。これは、初期化解除文字列が画面のクリアなどの不要な処理を行う場合に望ましい場合があります。
TERM
環境変数に依存することを明示的に述べていません。一般に、単純な読み取りやエコー以外の相互作用はTERM
に依存すると想定するのが適切です。 less
の場合、それは依存します。例えばTERM=vt100
を使用すると、X
オプションとその欠如の間に違いが見られない可能性が高く、「終了時に画面をクリアする」というリクエストは notは、「X
オプションをless
コマンドに追加しない」ことで解決されます。TERM=screen
で行われました。他の多くの端子タイプも同様に動作することを期待しています。あなたの問題はあなたの端末が私のように振る舞い、私の答えの残りが当てはまるからだと思います。F
もX
もありません私がする時
seq 1 2 | LESS= less
または
seq 1 100 | LESS= less
F
もX
も指定されていません。ツールは 代替画面 を使用します。これはman 1 xterm
からです:
VTxxxモードでは、ウィンドウの表示領域と同じサイズの代替画面バッファーをアクティブ化および非アクティブ化するためのエスケープシーケンスがあります。有効にすると、現在の画面が保存され、別の画面に置き換えられます。ウィンドウの上部からスクロールされた行の保存は、通常の画面に戻るまで無効になります。
押す必要があります qless
を作成するには、別の画面を終了して終了します。代替画面から通常の画面に戻るという行為は、less
の出力を非表示にする責任があります。簡単です。出力は代替画面バッファーに存在しますが、通常の画面バッファーには存在しません。
X
のみ私がする時
seq 1 2 | LESS=X less
# equivalent to
seq 1 2 | LESS= less -X
または
seq 1 100 | LESS=X less
# equivalent to
seq 1 100 | LESS= less -X
ツールは、通常はバッファを切り替える「初期化および非初期化文字列」を端末に送信しません。すべての出力は通常の画面になります。それでも私は押す必要があります q 出る。
F
とX
私がする時
seq 1 2 | LESS=FX less
# equivalent to
seq 1 2 | LESS= less -FX
または
seq 1 100 | LESS=FX less
# equivalent to
seq 1 100 | LESS= less -FX
通常の画面も使用されます。十分な行数がない場合、ツールはヒットしたかのようにすぐに終了します q すぐに–これがF
の仕組みです。ツールが終了した後も、常に表示される通常の画面であるため、出力は引き続き表示されます。
リンクした回答 Gitで使用されるデフォルトのオプションはFRSX
であると述べています。 リンクした構成 はFRX
を読み取ります(回答が公開された後に変更されましたか?または回答が最初から少し間違っていました)。とにかく、これがGitがデフォルトで使用するケースであることは間違いありません。
F
のみ私がする時
seq 1 2 | LESS=F less
# equivalent to
seq 1 2 | LESS= less -F
または
seq 1 100 | LESS=F less
# equivalent to
seq 1 100 | LESS= less -F
(最初のケースのように)代替画面が使用されますが、十分な行がない場合、less
はヒットしたかのようにすぐに終了します q すぐに(3番目の場合のように)。実際、行数が少ないと、通常の画面がすぐに表示されるため、出力がまったく表示されません。代替画面には気づきません。または、端末エミュレーターやビデオハードウェアがそもそもそれを表示しない場合もあります。モニターには、常に通常の画面が表示されます。出力は通常の画面バッファーに存在しません。これはあなたが経験していることです。
そうです、ここではF
(またはquit-if-one-screen
)が重要です。 X
を削除する場合は、F
も削除する必要があります。注 リンクされた回答 これを行います:FRSX
からR
になります(S
は行の折り返しを担当し、問題とは関係ありません)。ドロップ両方。 「X
オプションのみを削除するだけで十分です」というコメントがあります。私のテストはコメントが間違っていることを示しています、それはあなたが経験した問題につながります。