我在 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
是 的变体xterm
,mlterm
或者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)“ 看此链接