7

screen または tmux セッションを ssh 経由で再接続した後、一般的に次の 2 つの問題が発生します。

  • vim タブの補完が壊れています。 ファイルを提案する代わりに:e <Tab>生成します。:e ^Iタグ ( :tj) も同様です。vim を閉じて再度開くとこれは修正されますが、vim の状態が失われます。
  • R はグラフィックスを生成できません。X11 転送 ( ssh -X -Y) を有効にしています。閉じて再度開くことは役に立ちません。

ssh ウィンドウを閉じて再接続しても、意図的に問題を再現することはできません。問題は通常、再接続と再接続の間のネットワーク接続が長期間ない場合に発生し、通常は突然の接続解除になります (ネットワーク接続の喪失)。

4

2 に答える 2

3

Vim タブ補完:

これは、screen/tmux のターミナル エミュレータの問題です。タブがシェル (bash など) で機能する場合、それはシェルの功績によるものと思われます。制御シーケンスをマッピングすることを知っていましたが、vim はそうではありませんでした。おそらく、同様の方法で vim でこれを修正できますが、その後、他の対話型プログラムで問題に遭遇することになります。

tmux と話すことはできませんが、screen については、~/.screenrc を更新する必要があります。私の場合、Redhat に同梱されているデフォルト (私はもう使用していません...) からコピーしたものには、次のものが含まれています。

#xterm understands both im/ic and doesn't have a status line.
#Note: Do not specify im and ic in the real termcap/info file as
#some programs (e.g. vi) will not work anymore.
termcap  xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l

そのコメントに注意してください。問題を示している可能性があります。

Redhat の screenrc に由来する場合もそうでない場合もある vi への別の参照は、次のとおりです。

# Yet another hack:
# Prepend/append register [/] to the paste if ^a^] is pressed.
# This lets me have autoindent mode in vi.
register [ "\033:se noai\015a"
register ] "\033:se ai\015a"
bind ^] paste [.]

これらのいずれかまたは両方が役立つことを願っています。または、screen/tmux 端末エミュレーションを修正するために必要なものを調査するための正しい方向を示しました。おそらく、LinuxQuestions.org にある screen、vimrc、bashrcに対する回答がさらに役立つでしょう。


X11 転送:

screenを初めて起動すると、$DISPLAY が継承されます。たとえば、私は自分の TV サーバーでこれを利用しています。screen をローカルで起動し ( DISPLAY=localhost:0)、SSH 経由で接続すると、X に関するすべての操作が TV に表示されます。明らかに、これはあなたのユースケースではありません。解決策を理解できるように、それがどのように機能するかを教えようとしています。

古い SSH 接続によって起動された screen/tmux セッションに再接続している場合、運が悪く、同じ X ディスプレイに接続されている可能性があります (SSH はデフォルトで localhost:10.0 になり、衝突が見つかるたびに増加します)。それはあなたのために起こっているようには聞こえません。(「localhost」の部分はオプションであり、「.0」の部分も同様です。これらは目的には関係ありません。 DISPLAY=:10は と同じですDISPLAY=localhost:10.0)

screen/tmux セッションに接続する前に、$DISPLAY を見てください。

$ echo $DISPLAY
localhost:10.0

次に、screen/tmux にログインし、$DISPLAY を前に見たものに設定します。

$ screen -r
$ export DISPLAY=localhost:10.0

screen も tmux も、これ以上先に進むほどスマートではないと思います (私の TV サーバーの例を考えてみてください。これは常に望ましいとは限らず、screen/tmux に $DISPLAY をテストしてから、その可用性に応じて行動するように要求します)。は少し多い)、手動でこれを行う必要があります。

(あなたが私のように ~/.bashrc を追加する場合、これは面倒かもしれませscreen -r >/dev/null 2>&1ん。糖蜜のように遅く、もちろん SSH に耐えられないため、可能な限り X11 転送を回避しようとするため、この問題には遭遇しません。切断します。)

于 2014-02-14T00:56:21.903 に答える
0

2 番目の問題は、DISPLAY 変数の問題に似ています。echo $DISPLAY最初にログインするときと、セッションを再接続するときにもう一度試してください 。それらが異なる場合(これは私が疑うものです)、setenvまたはexport正しい値になります。

最初の問題については、tmux.conf (またはインストールのデフォルト) を調べてみてください。これ <TAB>は、開発バージョン (clear-history など) で面白いアクションに再マッピングされていたため、再接続後に tmux がイベントを所有し、ヴィムではありません。

于 2012-08-16T14:19:37.787 に答える