Como fazer com que o vim funcione corretamente com o tmux?

19

Estou tentando descobrir como tocar vime tmuxtocar juntos.

Meu problema é: Quando eu uso xterm-256coloreu recebo vima funcionar muito bem, mas o fundo não processar corretamente.

Corrigi isso usando screen-256color. Parece bom, mas quebra o Ctrl + arrow keys(eles entram no modo de inserção e excluem 4 linhas). Eu quero usar esses mapeamentos para alternar as guias vim.

Como faço para que isso funcione?

outsmartin
fonte

Respostas:

8

Corra para catdentro tmuxe pressione as teclas em questão para descobrir os códigos de escape que eles geram. Para mim, isso dá ^[[De ^[[C. Em seguida, apenas mapeie esses códigos de escape diretamente.

nnoremap ^[[D gT
nnoremap ^[[C gt

onde ^[é um caractere de escape, que você pode inserir pressionando <CTRL-v><ESC>no vim.

Mika Fischer
fonte
Isso não mudou o comportamento do meu vim.
precisa
O que é impresso quando você inicia o gato no tmux e pressiona as teclas?
Mika Fischer
^ [[1; 5C e ^ [[1; 5D. Boa ideia, eu não sabia como conseguir isso. Apenas tentei. Funciona! Obrigado.
precisa saber é o seguinte
Ótimo. Editei minha resposta para incorporar o método para obter os códigos de escape corretos.
Mika Fischer
22

Existem vários níveis de configuração que precisam ser configurados corretamente para a melhor funcionalidade.

  1. Configure o tmux para reconhecer as sequências. Antes de iniciar o tmux , defina um valor TERM que seja apropriado para o seu emulador de terminal (por exemplo xterm-256color). A entrada da base de dados terminfo identificado pela variável ambiente TERMO diz tmux como reconhecer as sequências para o modificado teclas de seta (as capacidades definidas pelo utilizador { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Configure o tmux para gerar as sequências. Defina a xterm-keysopção de sessão como onpara que o tmux gere sua própria sequência no estilo xterm quando receber uma sequência que seu TERM identifique. No seu ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Configure os programas em execução no tmux para usar / esperar a maioria de suas seqüências. Verifique se você está usando um screenTERM baseado em tmux (por exemplo screen-256color). Isso informa aos programas em execução no tmux como controlar a (re) emulação de terminal do tmux e quais respostas eles devem esperar do tmux .
  4. Infelizmente, as screenentradas do banco de dados terminfo com base em geral não definem nenhuma sequência para as teclas de seta modificadas (ou seja, elas podem não ter kUP, etc.), portanto, os programas executados no tmux podem não saber esperar tais seqüências. Você precisará configurar manualmente todos os programas que deseja reconhecer essas chaves. No Vim , você pode colocar isso no seu ~/.vimrc:

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys is on
        execute "set <xUp>=\e[1;*A"
        execute "set <xDown>=\e[1;*B"
        execute "set <xRight>=\e[1;*C"
        execute "set <xLeft>=\e[1;*D"
    endif
    

    Você pode usar as variantes sem x(por exemplo, em <Up>vez de <xUp>etc.) se achar que o uso da xvariável-faz com que as teclas de seta normais parem de funcionar.

    A vantagem de definir as teclas dessa maneira é que você não precisa mapear cada uma das combinações de modificadores separadamente (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); o *recebe interpretação especial para lidar com todas as sequências relacionadas (veja :help xterm-modifier-keys).

  5. Em seguida, você pode mapear as chaves em vez de suas sequências codificadas:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
Chris Johnsen
fonte
1
Ei, isso funcionou perfeitamente!
Pablo Olmos de Aguilera C.
2

Como explicado aqui , desative Apagamento de cor de fundo (BCE) limpando a t_utopção do terminal (execute :set t_ut=no Vim e pressione Control+ Lpara atualizar a exibição do terminal) para que os esquemas de cores funcionem corretamente quando o Vim for usado nas telas do tmux e GNU.

Dessa forma, você pode manter seu TERMvalor quanto xterm-256colorà detecção adequada de chaves e também obter a renderização adequada do esquema de cores do Vim! :-)

sunaku
fonte
1

A configuração set t_Co=256em seu ~ / .vimrc ajuda em tudo? Essa é apenas uma configuração de cores, mas pode ajudar a resolver alguns problemas.

Você também pode mapear novamente as ctrl+Arrowchaves no seu ~ / .vimrc ...

Edit: você tentou ctrl+Arrowem uma sessão de tela GNU? Eu acho que isso talvez seja seu problema.

Sardathrion - Restabelecer Monica
fonte
parece e funciona bem na tela com o xterm-256color
outsmartin
set t_Co = 256 é feito também
outsmartin
Isso ajudou?
Sardathrion - Restabelece Monica
Infelizmente não. O que você quer dizer com remapear ctrl + arrow? Eu os uso já remapeados para alternar abas no vim.
precisa
está mapeado da seguinte forma: map <C-Right> gt
outsmartin