Clicando longe em vim in tmux in urxvt

4

Eu uso o vim dentro do tmux dentro do urxvt, e o mouse funciona perfeitamente para clicar e selecionar texto, exceto quando eu quero clicar muito para a direita.

Parece estar relacionado à distância em número de colunas da esquerda. Quando vou além da coluna ~ 200 (não tenho certeza sobre o número exato), clicar simplesmente não faz nada.

Note que isto não está relacionado a uma janela vim: com duas janelas vim recebendo ~ 150 colunas cada, o clique não funcionará após a coluna ~ 50th na segunda janela. Está relacionado com toda a sessão de vim.

Observe também que clicar longe em um grande painel tmux (> 200 colunas) funciona perfeitamente.

No meu .tmux.conf , tenho esta linha:

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

e no meu .vimrc eu tenho isso:

if &term =~ "^screen"
    autocmd VimEnter * silent !echo -ne "3Ptmux;33]12;7
set -g default-terminal "screen-256color"
73\" 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 "3Ptmux;33]12;14
if &term =~ "^screen"
    autocmd VimEnter * silent !echo -ne "3Ptmux;33]12;7%pre%73\"
    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 "3Ptmux;33]12;14%pre%73\"
end
73\" end

Ele muda a cor do cursor dependendo do modo de edição do vim, e funciona, o que significa que o tmux realmente define $TERM para "screen-256color" - mas não sei se isso tem alguma relevância com o problema do mouse .

Estou executando o Ubuntu 12.04, o vim 7.3, o tmux 1.6 e o rxvt-unicode 9.14.

Alguém tem uma ideia sobre o que está causando esse problema? Obrigado.

Atualização: agora uso o xterm e funciona. Eu pensei que o urxvt era necessário para suporte unicode, mas, acredite ou não, o xterm também tem suporte unicode.

    
por paps 10.10.2012 / 18:27

2 respostas

4

Então, graças a Screwtape , eu tenho uma resposta para isso. Reproduzido abaixo:

O protocolo original do mouse xterm suporta apenas até 223 colunas e linhas. Versões posteriores do protocolo usavam a codificação UTF-8, que para ser uma idéia terrível, e suporte a terminais mais modernos um protocolo completamente diferente baseado na seqüência de escape SGR que é muito mais sensato.

tmux suporta automaticamente o protocolo original e o protocolo SGR nos dois sentidos (para o terminal em que ele está sendo executado e para o aplicativos que estão sendo executados dentro dele.) mas só solicita o modo UTF-8 de o terminal externo se 'mouse-utf8' estiver habilitado no arquivo de configuração.

Você pode usar a ferramenta vttest para experimentar diferentes protocolos de mouse dentro e fora de tmux para ter uma ideia melhor do que está acontecendo.

De acordo com a documentação da opção 'ttymouse' do Vim, ele perguntará o terminal para suporte ao protocolo original xterm se $TERM for uma variante de xterm , mlterm ou screen (e tmux se reporta como screen , então isso é ESTÁ BEM). Se o terminal suportar o recurso "RV" termcap para determinar o xterm número da versão, o Vim usará isso para atualizar automaticamente para 'xterm2' ou 'sgr' protocolos de mouse ... mas normalmente apenas xterm anuncia "RV" support, então tmux é deixado de fora do processo de upgrade automático.

No meu ~/.vimrc eu tenho o seguinte código para habilitar o suporte decente ao mouse, em vez de confiar na autodetecção do 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

(note que o set ttymouse=sgr é a correção real aqui; sugiro adicioná-lo ao seu .vimrc como Tim fez.)

    
por 05.05.2015 / 07:49
1

É devido a limitações no protocolo de relatório do mouse nos terminais: " O protocolo original do mouse X10 limita as ordenadas C x e C y a 223 (= 255 - 32) " veja este link

    
por 11.10.2012 / 17:21