Corrija as teclas de seta exibindo A, B, C, D no vi (não no vim)

16

Eu sei que no vim posso adicionar

set nocompatible

em .vimrcPara evitar que as setas exibir A, B, C, D no modo de inserção.

Mas estou usando o vi Versão 4.0 (gritter) 25/12/06 .

Como posso obter o mesmo comportamento?

== EDIT == (1)

Estou usando a versão vi do Arch Linux, criada a partir deste repositório CVS (última confirmação em 24 de fevereiro de 2007) com o seguinte comando:

make PREFIX=/usr LIBEXECDIR=/usr/lib/ex PRESERVEDIR=/var/lib/ex \
TERMLIB=ncurses FEATURES="-DCHDIR -DFASTTAG -DUCVISUAL -DMB -DBIT8"

e com esses três patches: fix-tubesize-short-overflow.patch , navkeys.patch e preserve-dir.patch .

== EDITAR (2) ==

Os problemas ocorrem no LXTerminal 0.2.0 , Cupim 10-1 , Tilda 1.2.4-1 , Terminator 0.98-1 e xterm 320-2 , mas não no urxvt v9.21 nem nos consoles virtuais do Linux.

== EDITAR (3) ==

De acordo com o standard Unix Especificação de seta para a esquerda, a seta para baixo, para a direita-seta, de seta para cima correspondem a, respectivamente, o seguinte capname: kcub1, kcud1, kcuf1e kcuu1. A comparação de entradas terminfo de xterme rxvt-unicode-256colorpara esses capterms fornece:

$ infocmp xterm rxvt-unicode-256color | grep -E 'kcuf1|kcub1|kcud1|kcuu1'

kcub1: '\EOD', '\E[D'.
kcud1: '\EOB', '\E[B'.
kcuf1: '\EOC', '\E[C'.
kcuu1: '\EOA', '\E[A'.

Modificando o xterm terminfo entrada por substituing '\EOD', '\EOB', '\EOC', '\EOA' por '\E[D', '\E[B', '\E[C', '\E[A'deve resolver o problema, mas é uma boa idéia? Talvez isso atrapalhe o uso de outros programas nas teclas de seta?

Ortomala Lokni
fonte
2
Eu acho que isso é causado pela interação do terminal vi (m) <->, então você também pode tentar algumas soluções / configurações relacionadas ao terminal.
VanLaser
1
Tradução do que o @VanLaser disse acima: sua entrada para a corrente TERMnos bancos de dados termcapou terminfoestá fora de sincronia com os códigos produzidos pelo teclado. A solução não é alterar o TERM, mas descobrir se o seu viestá vinculado termcapou terminfoencontrar os códigos de teclas emitidos pelo teclado e corrigir o banco de dados correspondente. Reclamar com o administrador de sistemas também pode funcionar.
Sato Katsura
1
Eu disse tudo isso? Às vezes me surpreendo :) (é claro, tudo que eu sabia era que era relacionado ao terminal).
VanLaser 15/10
1
Esta versão do vi é criada com ncurses e deve ser usada terminfo.
Ortomala Lokni 15/10/2015
2
Você viu essas dicas ? Talvez algo deles possa ser útil.
Boris Serebrov

Respostas:

2

Você pode criar um alias que define sua $TERMvariável

alias vi='TERM=rxvt-unicode-256color vi'

Adicione isso ao arquivo rc do seu shell e ele deverá ser definido para cada terminal que você iniciar.

jecxjo
fonte
No meu sistema, isso fará com que o Vi saia do modo de inserção (o que provavelmente é melhor do que imprimir lixo, mas ainda não resolve o problema).
Martin Tournoij
1

Às vezes, esse comportamento pode resultar da configuração incomum de mapeamentos de teclas no seu .vimrc- por exemplo, se você tem algo que mapeia duas ESCteclas pressionadas:

nmap <Esc><Esc> some_command_sequence

Em seguida, isso pode levar ao mau funcionamento do vim com as teclas de seta.

Pierz
fonte
A configuração descrita pelo OP é bastante específica e exibe o comportamento sem que esse mapeamento esteja em vigor. (Eu testei).
Rich