23

ターミナルで作業すると、最後のシェル コマンド実行出力の履歴が表示されます。vim を実行すると、全画面で開くファイルが表示されます。vim を終了すると、最後のシェル コマンドの履歴が再び表示されます。

ただし、画面からvimを使用すると. 最後のシェル コマンドの履歴ではなく、vim の終了時に編集していたファイルのフットプリントが表示されます。私はシェルの歴史を見たいと思っています。

どうすればこの動作を達成できますか?

私が使用した:

  • terminal.app と iterm2.app
  • xtermをxterm-256colorに切り替えてみました(iterm2.app内)
  • 「アプリのステータスバーが存在するときにスクロールバックする行を保存する」および「代替画面モードでスクロールバックする行を保存する」のチェックとチェック解除(iterm2)
  • termcapinfo xterm ti@:te@ を .screenrc に追加します (ただし、反対の問題の解決策になるはずですが、試してはいけません)
  • Linuxマシンにsshingし、そこでgnu-screenを使用しようとしています

今まで、私は望ましい動作を得られませんでした。

PS

私は少しグーグルで、反対の問題を解決しようとする人々のコメントを見ました:

多くの人はおそらく、less や vi などのコンソール ベースのプログラムが終了後に画面を復元して、そこにあったテキストが消えてしまう迷惑な動作を知っているでしょう。

この動作の背後にある主なアイデアは、プログラムが代替画面を使用してシェル履歴の画像を保存し、vim の終了時に表示するかどうかです。したがって、逆の問題を解決したい場合は、

悪の代替画面を追い払う

4

1 に答える 1

31

更新:screenデフォルトで代替画面のサポートを無効にする の機能を忘れていました。

に追加altscreen onして$HOME/.screenrc有効にします。おそらくこれで十分です。$TERM$TERMCAP、およびをいじるの$TERMINFOはおそらく不要です。とにかく、この回答の残りをここに残します。

私はこれを.screenrc長い間自分の中に持っていたので、頭がおかしくなりました。

現在のセッションでこの機能を有効にするには、screenエスケープ文字 (Cntrl-Aデフォルト) を入力し、その後に:altscreen on Enter.

これscreenがないと、terminfo または termcap で定義されていても、エスケープ シーケンスに応答しません。


vim(およびless、およびその他のほとんどの curses ベースのフルスクリーン プログラム) は、端末の terminfo エントリで定義されたsmcupおよび文字列を使用します。rmcup(これらは、古い termcap システムではそれぞれ tiおよびと呼ばれます)。代替画面に切り替わり、主画面に戻ります。tesmcuprmcup

terminfo エントリにこれらの文字列が含まれていない場合、プログラムはそれを行うことができません。

screen コマンドは、デフォルトで、あなた$TERMをに設定します"screen"smcupどうやら "screen" terminfo エントリにはand がありませんrmcup

terminfo エントリをハッキングしたい場合は、「screen」の既存の情報を変更してsmcupとを追加できrmcupます。terminfo をテキストに変換し、それを terminfo で使用されるバイナリ形式にinfocmp変換するコマンドが必要です。tic

より簡単な解決策は、環境変数をコマンド$TERMを呼び出す前の状態に設定することです。screen最近のほとんどの端末エミュレータは古い DEC VT100 をベースにしているので、十分に互換性があるはずです。

たとえば、私のシステムでは、ログインするとTERM=xterm; おそらくMacOSでは別のものです。セッション内ではscreen、デフォルトで次のようになります。

 $ echo $TERM
 screen

次のように変更できますxterm

$ export TERM=xterm

(繰り返しますが、「xterm」$TERMはシステムにあるものに置き換えてください。)

追加することもできます

term xterm

あなたに$HOME/.screenrc。実際screen、termcap/terminfo の設定を微調整するための多くのオプションがあります。man screen血まみれの詳細については、「terminfo」を検索してください。

于 2013-07-25T21:52:53.620 に答える