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!

Ivan
fonte
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.

Zee
fonte
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 ...

Ivan
fonte
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

txomon
fonte
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.

graywh
fonte
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>
frbl
fonte