Como obter o vim para funcionar corretamente com o tmux?

18

Estou tentando descobrir como obter vim e tmux juntos.

Meu problema é: Quando uso xterm-256color , obtenho vim para funcionar bem, mas o plano de fundo não é renderizado corretamente.

Eu consertei isso usando screen-256color . Isso parece legal, 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 em vim .

Como faço para que isso funcione?

    
por outsmartin 24.01.2012 / 17:11

4 respostas

8

Execute cat dentro de tmux e pressione as teclas em questão para descobrir os códigos de escape que eles geram. Para mim isso dá ^[[D e ^[[C . Em seguida, mapeie esses códigos de escape diretamente.

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

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

    
por 24.01.2012 / 18:49
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 seqüências. Antes de lançar tmux , defina um valor TERM que seja apropriado para o seu emulador de terminal (por exemplo, xterm-256color ). A entrada do banco de dados terminfo identificada pela variável de ambiente TERM informa ao tmux como reconhecer as seqüências das chaves de seta modificadas (os recursos definidos pelo usuário { kUP , kDN , kRIT , kLFT } {, 3 .. 7 }).
  2. Configure o tmux para gerar as seqüências. Defina a opção xterm-keys session como on para que tmux gere sua própria sequência no estilo xterm quando receber uma sequência identificada pelo TERM. No seu ~/.tmux.conf :

    set-option -g xterm-keys on
    
  3. Configure os programas em execução dentro do tmux para usar / esperar a maioria de suas seqüências. Certifique-se de estar usando um TERM% com base em screen dentro de tmux (por exemplo, screen-256color ). Isto diz aos programas que estão rodando dentro do tmux como controlar a (re) emulação de terminais do tmux e quais respostas eles devem esperar de tmux .
  4. Infelizmente, as entradas do banco de dados terminfo screen -based frequentemente não definem nenhuma sequência para as teclas de seta modificadas (ou seja, podem não ter kUP , et cetera), portanto os programas em execução dentro tmux pode não saber esperar tais seqüências. Você precisará configurar manualmente todos os programas que você deseja reconhecer essas chaves. Em 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 querer usar as variantes sem x (ou seja, <Up> em vez de <xUp> , et cetera) se você achar que usar o x -variant faz com que suas setas normais parem de funcionar.

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

  5. Então você pode mapear as chaves em vez de suas sequências codificadas:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
por 22.03.2012 / 10:03
2

Conforme explicado aqui , desative Apagar cor de fundo (BCE ) limpando a opção t_ut terminal (execute :set t_ut= no Vim e depois pressione Controlar + L para atualizar a exibição do terminal) para que os esquemas de cores funcionem corretamente quando o Vim é usado dentro do tmux e da tela GNU.

Dessa forma, você pode manter o seu valor de TERM como xterm-256color para a detecção de chaves adequada, enquanto também obtém a renderização adequada do esquema de cores Vim também! : -)

    
por 26.02.2013 / 18:28
1

A configuração de set t_Co=256 na sua ajuda ~ / .vimrc é de todo? Esta é apenas uma configuração de cor, mas pode ajudar a resolver alguns problemas.

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

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

    
por 24.01.2012 / 17:26