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 転送を回避しようとするため、この問題には遭遇しません。切断します。)