画面 - Vim終了後の奇妙な動作

画面 - Vim終了後の奇妙な動作

設定画面に問題があります。

私はscreen.rcとても簡単で、次のようになります。

altscreen on
termcapinfo xterm ti@:te@

SSHクライアントを使用して直接接続するのと同じように動作するように画面を設定したいと思いますMobaXterm。だから私が達成したいのは次のとおりです。

  • マウスでスクロール可能vim(マウス設定なしa
  • マウスでターミナル出力スクロール(Ctrl+なしA Esc
  • 他のエディタなどを終了したら、出力ではなく前のコマンドを表示したり、画面を消去したいとvim思います。vim

また、画面を使用して多くのコンピュータに接続し、すべてのコンピュータで変更できない.vimrcため、設定(および同様のローカル設定ファイル)は不可能です。.vimrc

私はこれを達成することは不可能であることがわかりました。したがって、私の端末ではこれら2行のコードを使用して.screenrc端末出力をスクロールできますが、端末ではvimキーボードを使用する必要があります。いいですね。

それでは、ポイントを見てみましょう。

休憩時にはvimとても奇妙な行動が見えます。コンソールへの出力はコンソールが開かれる前と同じですので、vimこれが私が望むものです。ただし、プロンプトは最後のコマンド(run vim)の後ではなくウィンドウの上部にあります。そこで、以前の結果に基づいて作成しました。

私はあなたが理解できることを願っています。問題を解決する方法を知っていますか?どんな助けでも大変感謝します。

これが言葉になるかどうかはわかりませんが、MobaXterm画面を構成すると仮想マシンに接続することになりました。おそらくこれはSSHとも関係があるでしょう。

編集:他の同様のSSHクライアントも試してみましたが、同じことがありPuttyました。

答え1

説明されている症状はrc(回復カーソル)エスケープシーケンスによって引き起こされます。考えてみると、問題の源はおそらくvimです。

  • 与えられた を使用して、プログラム.screenrcscreenxterm代替画面機能をエミュレートします。
  • これは、terminfosmcupおよびrmcup(termcaptiおよび)制御シーケンスを使用してte行われます。
  • 切り替えるとき到着代替画面では、xtermは(a)カーソル位置を保存し、(b)代替画面を消去し、(c)代替画面を表示します。
  • 切り替えるとき~から代替画面では、xterm は (a) カーソル位置を通常画面に復元し、(b) 一般画面を表示します。
  • これらの作業は個別に行われるのではなく、単一の制御シーケンスで行われる。端末の説明で(infocmp出力)を見ることができます1049
  • このscreenプログラムはこれらのタスクをシミュレートします。
  • しかし、同じではないカーソル位置を保存/復元するために単一変数を使用しないxterm:クイックチェックで、次のことがわかります。
    • カーソル位置を保存します(tput sc)。
    • 代替画面に/から切り替える(tput smcup
    • 次はtput rmcup)で、最後に
    • カーソル位置の復元( tput rc)、
    • その後、カーソルが保存された位置に移動しますtput sc

vim - と vim のプラグイン - エスケープシーケンスを送信できます。 vimの終了時にカーソルを復元するためにエスケープシーケンスを送信するようです。ここで簡単に確認すると、vimが正常に動作していることがわかります(ただし、構成とバージョンが異なる)。それではプラグインを確認してみましょう。

この状況をデバッグする場合は、画面に送信された文字(scriptusingなど)をキャプチャし、最も一般的なシーケンスを見つけますrc

  • escape7
  • escape[u

xtermの動作をより密接に一致させることをお勧めしますが、最終的に予期しない保存/復元カーソルシーケンスを送信するのに問題があるようですscreenvim

関連読書:

答え2

問題は愚かな配線によって引き起こされたことが判明した。.bashrc

TERM=xterm; export $TERM

したがって、screenを実行した後、この行を削除して問題がなくなりましTERM=xtermTERM=screen

答え3

ここで解決策を見つけました。端末でスクリーンリカバリを設定するには? vimの場合:

vimの場合は、次のものを含めることができます。

set t_ti= t_te=

~/.vimrcにあります。

関連情報