在 urxvt 中的 tmux 中单击 vim 远处

在 urxvt 中的 tmux 中单击 vim 远处

我在 urxvt 内的 tmux 中使用 vim,鼠标可以很好地单击和选择文本,除非我想单击太靠右的地方。

这似乎与距离左侧的列数有关。当我超过第 200 列(不确定具体数字)时,单击根本不起作用。

请注意,这与 vim 窗口无关:两个 vim 窗口各占约 150 列,第二个窗口的第 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-unicode 9.14。

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

更新:我现在使用 xterm,它工作正常。我以为 urxvt 需要 unicode 支持,但不管你信不信,xterm 也支持 unicode。

答案1

因此,感谢斯克鲁特, 我有一个答案为此。转载如下:


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

tmux自动双向支持原始协议和 SGR 协议(对于其内部运行的终端以及其内部运行的应用程序),但如果在配置文件中启用了“mouse-utf8”,它只会从外部终端请求 UTF-8 模式。

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

根据 Vim'ttymouse'选项的文档,如果$TERM是 的变体xtermmlterm或者screen(并将tmux自身报告为screen,因此没问题),它将要求终端提供 original-xterm-protocol 支持。如果终端支持"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是实际的修复,这里;我建议将其添加到您的.vimrc就像蒂姆那样。)

答案2

这是由于终端中的鼠标报告协议的限制:“原始 X10 鼠标协议将 C x 和 C y 坐标限制为 223 (=255 - 32)“ 看此链接

相关内容