シェルターミナルでは、
echo $TERM --- prints xterm
これvi somedoc
で、exit
シェル画面からviの内容が消え、以前にシェルが実行したコマンドが表示されます。今まではそんなに良くなった。
これで、sshセッションをバックグラウンドに置いてscreen ssh localhost
実行します。Ctrl-A, c
echo $TERM --- prints screen
vi somedoc
これを行うと、viexit
バッファの内容が画面全体を占有し、bashシェルプロンプトが画面の最後の行に移動します。これにより、clear
vimに入り、終了した後に端末が必要になり、端末が使用できなくなります。
export TERM=xterm
viを終了すると、端末のバッファ内容が消去されたことを確認するためにこれを試しましたが、うまくいきませんでした。
答え1
これは代替画面と呼ばれるxtermの機能です。アプリケーションが代替画面を使用するかどうかは、エスケープシーケンスによって制御されます。通常、これは端末の初期化およびリセットシーケンス(terminfoおよびtermcapsmcup
も含む)と組み合わせられます。rmcup
ti
te
xtermプログラム(xtermをエミュレートできる他のプログラムとは異なり)には、代替画面へtiteInhibit
の切り替えと代替画面の切り替えを無効にするように指示するXリソース設定(termcap機能の名前にちなんで命名)があります。ただし、必要に応じて切り替えるようにterminfoの説明を選択(または変更)してそれを制御できます。
詳しくはxterm FAQをご覧ください。viを実行しても画面が消えないのはなぜですか?