TERM = (linux | xterm) vi em um xterm ou no problema AAABBBBBBCCDDD

3

Normalmente, quando quero executar vim em uma sessão konsole da área de trabalho, certifico-me de que a variável TERM esteja definida como linux , pois as teclas de direção não funcionam no modo de inserção com TERM=xterm . Eles mostram o capital A. D. em vez de mover o cursor.

Agora, acho que essa é a maneira errada de fazer as coisas, pois konsole ou xterm é realmente do tipo xterm .

Existe uma maneira melhor de fazer as teclas de seta funcionarem em vi / vim ?

OS: Kubuntu 13.04 (instalação limpa)

    
por jippie 14.08.2013 / 19:17

2 respostas

5

Eu acho que sei o que está acontecendo.

Você não configurou vim para desativar o modo de compatibilidade vi .

Em vi , você só pode pressionar as teclas de seta no modo comando . Quando no modo de inserção, as sequências de caracteres enviadas ao pressionar as teclas de seta são tratadas como se os caracteres fossem inseridos individualmente.

Agora, na inicialização, vi define o terminal no modo de transmissão do teclado (kx). Nesse modo, os terminais geralmente enviam uma sequência de caracteres diferente ao pressionar as teclas de seta do que quando não.

Por exemplo, a tecla Up envia \eOA no modo kx e \e[A quando não.

Para definir o terminal no modo kx, ele procura o recurso smkx (transmissão do teclado no modo de configuração) no banco de dados terminfo para o valor atual de $TERM .

Se você observar o recurso smkx para xterm , konsole e linux , consulte:

$ infocmp -1 linux | grep smkx
$ infocmp -1 xterm | grep smkx
    smkx=\E[?1h\E=,
$ infocmp -1 konsole | grep smkx
    smkx=\E[?1h\E=,

Isso é smkx não está definido na entrada linux .

O que isso significa é que quando você inicia vim com TERM=linux , o vim não configura o terminal no modo kx, o que significa que envia \e[A em vez de \eOA quando você pressiona o Up chave por exemplo.

Agora, o que o \eOA faz no vim quando você está no modo de inserção? \e (ESC), sai do modo de inserção e retorna ao modo de comando. O abre uma nova linha e entra no modo de inserção novamente, A insere o caractere A .

Enquanto \e[A , \e (ESC) deixa o modo de inserção, [A é uma combinação desconhecida (em vim , [ é um prefixo e é sempre seguida por outro caractere), portanto não faz nada.

Então, o que você precisa fazer é: manter $TERM como está, não usar as teclas de seta no modo de inserção quando estiver na compatibilidade vi ou adicionar set nocp ao seu ~/.vimrc , para usar as teclas de seta modo de inserção.

    
por 14.08.2013 / 22:04
-2

A maneira mais rápida de corrigir isso é:

echo "set nocp" > ~/.vimrc

Isso deve corrigir:)

    
por 30.11.2016 / 13:41