Chaves desarrumadas no vim ao executar dentro do tmux


9

Eu tenho jogado com o tmux e estou adorando. No entanto, há um problema irritante ao executar o vim dentro dele.

De alguma forma, as teclas de seta são remapeadas, mas apenas em alguns momentos, como ao acionar o Command-T, se eu tentar rolar a lista de arquivos, o comando é cancelado e eu sou jogado no modo de inserção e, dependendo da tecla de seta Pressionei, um A, B, C ou D é inserido.

Se eu usar as setas para percorrer um buffer, por exemplo, elas funcionarão corretamente.

Alguma ideia?

Obrigado!


11
O que tem $TERMlá fora tmux? E por dentro? Parece que algo está acontecendo com os modos de aplicativo e teclado normal.
— Pausado até novo aviso.

Fora tmux: xterm, inside: screen ... então, se eu executar TERM=screen vim, vejo o mesmo comportamento, então devo corrigir a tela?
— Ivan Ivan

Respostas:


13

Eu simplesmente adicionei set -g default-terminal "xterm"ao meu .tmux.conf

Isso fez o tmux usar o xterm em vez da tela, então a vida é linda e não preciso me preocupar em pisar nas teclas.


5
Melhor assim set -g default-terminal "xterm-256color". Caso contrário, não perceberia quando estava no modo visual devido a cores limitadas.
— Macario

11
Eu tive que combinar isso com set -g xterm-keys on.
— Dan Stahlke

4
Vale a pena notar que a página de manual do tmux diz para nunca definir default-terminal. Não sei ao certo quais são as ramificações.
— Dan Stahlke

11
Dado o aviso que default-terminalnão deve ser definido, talvez haja uma correção melhor do lado do vim: link .
— Dan Stahlke

Não está funcionando no meu caso ...
— Blaszard

6

Finalmente, encontrei minha resposta aqui: ao executar a tela no OSX, o comando + r mexe com as teclas de seta no vim em todas as telas

O estranho é que apenas adicionei UM mapeamento ao meu arquivo .vimrc:

map <Esc>[B <Down>

Mas esse mapeamento único faz com que TODAS as teclas de seta funcionem corretamente ...


De alguma forma ... esta foi a única solução que funcionou para mim no CentOS 6.3
— Patryk

Isso não faz absolutamente nenhum sentido para mim, mas adicionar um único mapeamento parece corrigir todas as chaves para mim também. Ainda mais estranho (pelo menos para mim) o mapeamento direto para o pressionamento de tecla no modo de inserção não o corrige ( map ^[A <Up>funciona pressionando Ctrl + V <Up> e excluindo o O, map ^[OA <Up>pressionando Ctrl + V <Up> e deixando o O não 't). Eu não entendo ... mas tanto faz. Minhas chaves agora funcionam. Obrigado.
— ND


1

Apenas no caso de alguém ficar bravo com essas soluções não funcionarem.

Verifique se você realmente não está usando o plugin tmux + vim + AutoClose vim. O fechamento automático mapeia algo que faz com que os caracteres ABCD sejam inseridos na linha anterior!

Acabei de apagar o plugin e está funcionando bem agora


Obrigado! Foi isso para mim. Acabei usando esse plugin de fechamento automático . Ele fornece funcionalidade semelhante.
— ollpu

0

O Command-T faz algo idiota mapeando ao executar em um terminal. Ignora o mapeamento se $ TERM for vt100 * ou xterm *, mas essa não é uma boa solução.


0

Para as pessoas que desejam mover o cursor no modo de linha de comando, dê uma olhada nesta postagem do blog. Acabei adicionando oito linhas no meu vimrc;

" Needed for tmux and vim to play nice
" Needed for tmux and vim to play nice
map <Esc>[A <Up>
map <Esc>[B <Down>
map <Esc>[C <Right>
map <Esc>[D <Left>

" Console movement
cmap <Esc>[A <Up>
cmap <Esc>[B <Down>
cmap <Esc>[C <Right>
cmap <Esc>[D <Left>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.