web-dev-qa-db-ja.com

urxvtのtmuxのvimで遠くをクリックします

私はurxvt内のtmux内でvimを使用していますが、右にクリックしすぎた場合を除いて、マウスはテキストのクリックと選択に最適です。

左からの列数の距離に関係しているようです。列〜200を超えると(正確な数がわからない)、クリックしても何も起こりません。

これはvimウィンドウとは関係がないことに注意してください。2つのvimウィンドウがそれぞれ最大150列を占めるため、2番目のウィンドウの最大50列以降のクリックは機能しません。それはvimセッション全体に関連しています。

また、大きなtmuxペイン(> 200列)で遠くをクリックすると完全に機能することにも注意してください。

私の.tmux.confには、次の行があります。

set -g default-terminal "screen-256color"

そして私の.vimrcにはこれがあります:

if &term =~ "^screen"
    autocmd VimEnter * silent !echo -ne "\033Ptmux;\033\033]12;7\007\033\\"
    let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]12;5\x7\<Esc>\\"
    let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]12;7\x7\<Esc>\\"
    autocmd VimLeave * silent !echo -ne "\033Ptmux;\033\033]12;14\007\033\\"
end

Vimの編集モードに応じてカーソルの色が変わり、動作します。つまり、tmuxは実際に$TERMを「screen-256color」に設定しますが、これが私のマウスの問題と関係があるかどうかはわかりません。

Ubuntu 12.04、vim 7.3、tmux 1.6、rxvt-unicode9.14を実行しています。

誰かがこの問題を引き起こしているものについての考えを持っていますか?ありがとう。

更新: xtermを使用しましたが、機能します。ユニコードのサポートにはurxvtが必要だと思いましたが、信じられないかもしれませんが、xtermにはユニコードのサポートもあります。

4
paps

だから、 Screwtape のおかげで、私は 答え を持っています。以下に再現:


元のxtermマウスプロトコルは、最大223列と行のみをサポートします。プロトコルの新しいバージョンはUTF-8エンコーディングを使用していましたが、これはひどい考えでした。最近の端末は、はるかに正気なSGRエスケープシーケンスに基づいて完全に異なるプロトコルをサポートしています。

tmuxは、元のプロトコルとSGRプロトコルの両方の方法(内部で実行されている端末と内部で実行されているアプリケーション)を自動的にサポートしますが、「mouse-utf8」が有効になっている場合にのみ、外部端末からUTF-8モードを要求します。構成ファイル内。

vttestツールを使用して、tmuxの内外でさまざまなマウスプロトコルを試して、何が起こっているのかをよりよく理解することができます。

Vimの_'ttymouse'_オプションのドキュメントによると、_$TERM_がxtermmlterm、またはscreenのバリアントである場合(およびtmuxはそれ自体をscreenとして報告する場合)、端末にoriginal-xterm-protocolのサポートを要求します。 OK)。端末が_"RV"_ termcap機能をサポートしてxtermバージョン番号を決定する場合、Vimはそれを使用して自動的に_'xterm2'_または_'sgr'_マウスプロトコルにアップグレードします...ただし、通常はxtermのみが_"RV"_がサポートされているため、tmuxは自動アップグレードプロセスから除外されます。

私の_~/.vimrc_には、Vimの自動検出に依存する代わりに、適切なマウスサポートを有効にする次のコードがあります。

_" Screen/tmux can also handle xterm mousiness, but Vim doesn't
" detect it by default.
if &term == "screen"
set ttymouse=xterm2
endif

if v:version >= 704 && &term =~ "^screen"
" Odds are good that this is a modern tmux, so let's pick the
" best mouse-handling mode.
set ttymouse=sgr
endif
_

(注目すべきは、ここでは_set ttymouse=sgr_が実際の修正です。Timが行ったように _.vimrc_ に追加することをお勧めします。)

4
ELLIOTTCABLE

これは、端末のマウスレポートプロトコルの制限によるものです: "元のX10マウスプロトコルは、C xおよびC y座標を223(= 255-32) "参照 このリンク

1
piec