web-dev-qa-db-ja.com

終了後にvim画面バッファーを以前のbashアクティビティに置き換える方法は?

私はbash(またはvim)機能が何であるかを調べようとしています。これがシナリオです。私はbashターミナルにいて、vimで何かを編集してから、終了してbashに戻ります。一部の端末では、vimセッション画面が消えて以前のbashシェルアクティビティが表示されます(これが必要ですか?)。

その他の場合、vimセッション画面バッファーは残ります(古いbashシェルアクティビティを非表示にします)。画面をクリアするか、bashアクティビティがそのvimセッションバッファーを画面からプッシュするまで待つ必要があります。

この動作を制御して、vimセッションバッファーを以前のbashアクティビティに置き換えるにはどうすればよいですか?

ありがとうティム

14
user375616

Vimは、セッションの開始時にt_tit_ksを端末に送信し、セッションの終了時にt_tet_keを端末に送信します。 t_tiおよびt_teシーケンスにより、端末は代替画面に切り替わります。

~/.vimrcファイルで、次の行を含めることにより、ドキュメントが終了したときにvimを画面に残しておくことができます。

set t_ti=""

これに似た行がある場合、それを削除すると、vimを終了したときに前の端末の内容が表示されます。

この問題の原因は、プログラムscreenを使用している可能性があります。 screenセッションにいるとき、vimは端末の状態を返すことができないことがわかりました。

それがスクリーンに固有なのか、Ubuntu15.10のscreen/vimコンボに固有なのかわからない。上記と同じ原因で、screenのtermcapが異なると思います。

4
teknopaul

ログインするたびに、~/.bash_profileファイルに行を追加して、TERMをxtermとしてエクスポートするだけです。次のようにします。

echo "TERM=xterm; export TERM" >> ~/.bash_profile

これで、次回ログインしたときに問題が修正されます。再ログインしたくない場合は、次のいずれかを実行できます...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
3
ekerner

ティム。上記の答えは両方とも正しいです。 $ TERMのtermcapエントリでそれを行う機能が定義されている場合、Vimは端末を「代替画面」に切り替えます。

「一部の端末では(...正しく動作します...)」および「他の端末では(...正しく動作しません...)」と言います。

これらすべての端末でまったく同じ端末エミュレーターを実行していますか?

たとえば、自宅のLinuxボックスには、gnome-terminal、xterm、Konsole、yakuakeなど、ctrl-alt-F1に関連付けられた「仮想端末」とともに忘れてしまったものがいくつかあります... ctrl-alt-F6かそこら。これらのほとんどは、「linux」という名前の端末定義を持つ仮想端末を除いて、「xterm」の「標準」termcapエントリで機能します。

ターミナルエミュレータ自体と、動作するターミナルと動作しないターミナルの$ TERMの値をチェックして、何が違うかを確認します。また、別のユーザーとしてログインしている場合は、それが問題の核心になる可能性があります。各ユーザーには独自の.bashrcがあるため、さまざまな設定がユーザーごとに異なる可能性があります。

お役に立てば幸いです。
-pbr

2
pbr

これは、端末と、端末情報を処理するマシンの設定に関係しています。ポータブルソリューションの1つは、GNU Screenを使用することです。Vim用に1つのウィンドウを開き、Bash用に別のウィンドウを開いて2つのセッションを分離します。X11でxtermなどのグラフィカル端末を使用している場合は、GnomeターミナルでOS XのGnomeまたはTerminal.appを使用すると、新しいウィンドウまたはタブを開いて同じ効果を得ることができます。

1
wilhelmtell