在 urxvt 中的 tmux 中在 vim 中单击远处

pap*_*aps 4 vim urxvt xterm tmux

我在 urxvt 中的 tmux 中使用 vim,并且鼠标非常适合单击和选择文本,除非我想在右侧单击太远。

它似乎与左侧列数的距离有关。当我超过 ~200 列(不确定确切数字)时,单击什么都不做。

请注意,它与 vim 窗口无关:两个 vim 窗口每个占用 ~150 列,在第二个窗口中的 ~50th 列之后单击将不起作用。它与整个 vim 会话有关。

另请注意,在大 tmux 窗格(> 200 列)中单击很远很有效。

在我的.tmux.conf我有这一行:

set -g default-terminal "screen-256color"
Run Code Online (Sandbox Code Playgroud)

在我的.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
Run Code Online (Sandbox Code Playgroud)

它会根据 vim 的编辑模式更改光标的颜色,并且可以正常工作,这意味着 tmux 确实设置$TERM为“screen-256color”——但我不知道这是否与我的鼠标问题有关。

我正在运行 Ubuntu 12.04、vim 7.3、tmux 1.6 和 rxvt-unicode 9.14。

有没有人知道是什么导致了这个问题?谢谢。

更新:我现在使用 xterm 并且它有效。我认为 urxvt 是 unicode 支持所必需的,但不管你信不信,xterm 也有 unicode 支持。

ELL*_*BLE 5

所以,多亏了Screwtape,我得到了这个答案。转载如下:


原始xterm鼠标协议最多仅支持 223 列和行。该协议的后续版本使用了 UTF-8 编码,结果证明这是一个糟糕的想法,而更现代的终端支持基于 SGR 转义序列的完全不同的协议,该协议更加合理。

tmux 自动支持两种方式的原始协议和 SGR 协议(对于它在其中运行的终端,以及在其中运行的应用程序。)但如果“mouse-utf8”在配置文件。

您可以使用该vttest工具在内部和外部试验不同的鼠标协议,tmux以更好地了解发生了什么。

根据 Vim'ttymouse'选项的文档,如果$TERMxterm, mltermor的变体,它将要求终端提供 original-xterm-protocol 支持screen(并将tmux自身报告为screen,所以没关系)。如果终端支持"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
Run Code Online (Sandbox Code Playgroud)

(值得注意的set ttymouse=sgr是,这是实际的修复,在这里;我建议像 Tim 那样将它添加到您的.vimrc。)