
ターミナルで clear を実行すると、画面の上から現在の行までのスクロールバック バッファが削除されます。xterm、st、urxvt で試してみましたが、問題は解決しません。スクロールバック バッファに影響しないように clear の動作を変更する方法はありますか?
答え1
「画面の上から現在の行まで」というコメントは曖昧です。目に見える部分画面の、それはスクロールバック端末のスクロールバックは、スクロールバー (または Shift PageUp などの適切なキー) を使用することによってのみ表示できる部分です。
XTerm 制御シーケンス関連するエスケープシーケンスを文書化します。
CSI Ps J Erase in Display (ED).
Ps = 0 -> Erase Below (default).
Ps = 1 -> Erase Above.
Ps = 2 -> Erase All.
Ps = 3 -> Erase Saved Lines (xterm).
端末記述機能はclear
最後から2番目のものを使用します。例:
clear=\E[H\E[2J
カーソルを左上に移動して、画面全体をクリアします。できた使用下を消すただし、端末の説明では使用されません。
クリアすることを指すスクロールバック: これは端末固有の機能で、もともとはxtermのエスケープシーケンスでした(1999、文書化されているctlseqs.ms変更点には触れられていないが、それ以降(2011)はLinuxコンソールの拡張機能として実装されており、対応する端末の説明も含まれています。端末データベースでは、「その他の拡張機能」。
現在、これらの端末の説明には次の機能があります:
- Linux3.0 について(「linux」の現在のデフォルト)
- パテ
- xterm+基本(ほとんどの「xterm」バリアントで使用されるビルディング ブロック)
VTE などの xterm 類似製品でサポートされているかどうかは、テストによって答える必要があります (VTE または Konsole に関する有用なドキュメントはありません)。
拡張機能を使用しない場合は、E3
使用する端末の説明からの機能、例:
infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo
私はオプションを使うことを提案した-1
そして-x
書式を簡素化し、変更する機能を示すために、https://ghostbin.com/paste/kfsbjそのアドバイスと一致しています:
- パス名は
/home/flowerpick/.terminfo/x/xterm
ncursesによって使用される - 機能
AX
と はXT
拡張機能 ( などE3
) であり、 オプションとともに表示されます-x
。
複数の端末タイプを使用している場合は、各 ( の値$TERM
) に対してこの操作を行う必要があり、変更は を実行しているマシンにのみ適用されますclear
。出力の最初の数行は、infocmp
どのマシンで作業しているかを示します。
# Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
たとえば、を のようなものにuxrvt
設定すると、 では次のような行が生成されます。$TERM
rxvt-unicode
infocmp
# Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode
rxvt-unicode|rxvt-unicode terminal (X Window System),
このst
プログラムはxterm
(またはおそらくxterm-256color
)を使用していますが、私が のコピーを見たのは久しぶりです。それコメントするほど十分に機能しました。
ところで、あなたはできた指定されたエスケープ シーケンスを送信するエイリアスがありますclear
(端末の説明は無視されます) が、これを報告した人はいません。
「上をクリア」したい場合、「クリア」と入力するほど簡単ではありません。エスケープは\033[1J
左上から現在のカーソル位置までを消去します。これを実行するスクリプトを作成して、行現在のカーソルの上:
- カーソル位置レポートを使用して、現在カーソルが置かれている行/列を見つけ、
- カーソルが最初の行にない場合は(その位置を保存して)、カーソルを1行上に移動してから(シーケンスで
hpa
)移動します。右多数、 - 「上記クリア」を発行し、
- (カーソルアドレス指定)を使用して元の位置に戻ります
cup
。
カーソル位置レポートの部分は、(たとえば) readline バインディングでは機能しないと思われるので、スクリプトを提案しました。最初の行にあるという問題がなければ、カーソルの保存/復元機能を使用するバインディングを作成できます。
答え2
私も同じ問題を抱えていましたが、エイリアスを追加すると.bashrc
解決しました:
alias clear='printf "\E[H\E[2J"'
注意: 変更は.bashrc
新しいターミナルを開いた後に有効になります。
答え3
私は定期的にclear
コマンドプロンプトを画面上部に移動させ、以前の操作からの有用なエラーメッセージなどの重要なコンテンツを含むスクロールバックバッファを誤って消去します。
man ページを確認すると、次のように明記されています。
clear は、可能であれば、スクロールバック バッファ (拡張「E3」機能が定義されている場合) も含めて画面をクリアします。
そこにはオプションもあります:
-x 拡張された「E3」機能を使用して端末のスクロールバック バッファをクリアしません。
それ以来、私はこれを ~/.bashrc のエイリアスのリストに追加しました:
alias clear='clear -x'
を実行すると、先頭に移動するように求めるプロンプトが引き続き表示されますclear
が、必要に応じてさらに上にスクロールできるようになりました。