Correction des touches fléchées affichant A, B, C, D dans vi (pas dans vim)

16

Je sais que dans vim je peux ajouter

set nocompatible

dans .vimrcAfin d' éviter que les touches flèche afficher A, B, C, D en mode d'insertion.

Mais j'utilise vi Version 4.0 (gritter) 25/12/06 .

Comment puis-je obtenir le même comportement?

== MODIFIER == (1)

J'utilise la version vi d'Arch Linux qui est construite à partir de ce référentiel CVS (dernier commit le 24 février 2007) avec la commande suivante:

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

et avec ces trois correctifs: fix-tubesize-short-overflow.patch , navkeys.patch et preserve-dir.patch .

== MODIFIER (2) ==

Les problèmes se produisent dans LXTerminal 0.2.0 , Termite 10-1 , Tilda 1.2.4-1 , Terminator 0.98-1 et xterm 320-2 mais pas dans urxvt v9.21 ni dans les consoles virtuelles Linux.

== MODIFIER (3) ==

Selon le Single Unix Specification sur la flèche gauche, flèche vers le bas, flèche droite, flèche haut correspondent respectivement à la capname suivante: kcub1, kcud1, kcuf1et kcuu1. La comparaison des entrées terminfo de xtermet rxvt-unicode-256colorpour ces capterms donne:

$ 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'.

Modification de l'entrée terminfo xterm par substituing '\EOD', '\EOB', '\EOC', '\EOA' par '\E[D', '\E[B', '\E[C', '\E[A'devrait résoudre le problème , mais est - ce une bonne idée? Peut-être que cela cassera l'utilisation des touches fléchées des autres programmes?

Ortomala Lokni
la source
2
Je pense que cela est dû à l'interaction du terminal vi (m) <->, vous pouvez donc également essayer certaines solutions de contournement / configuration liées au terminal.
VanLaser
1
Traduction de ce que @VanLaser a dit ci-dessus: votre entrée pour le courant TERMdans les bases de données termcapou terminfon'est pas synchronisée avec les codes produits par le clavier. La solution n'est pas de changer le TERM, mais de savoir si votre viest lié à termcapou terminfo, de trouver les codes clés émis par le clavier et de corriger la base de données correspondante en conséquence. Se plaindre à l'administrateur système peut également fonctionner.
Sato Katsura du
1
J'ai dit tout ça? Parfois, je m'étonne :) (bien sûr, tout ce que je savais, c'est que c'était lié au terminal).
VanLaser
1
Cette version de vi est construite avec ncurses, elle devrait ensuite être utilisée terminfo.
Ortomala Lokni
2
Avez-vous vu ces conseils ? Peut-être que certains d'entre eux peuvent être utiles.
Boris Serebrov

Réponses:

2

Vous pouvez créer un alias qui définit votre $TERMvariable

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

Ajoutez cela au fichier rc de votre shell et il devrait être défini pour chaque terminal que vous lancez.

jecxjo
la source
Sur mon système, cela ne fera que quitter le mode d'insertion Vi (ce qui est probablement mieux que de le faire imprimer les ordures, mais ne résout toujours pas tout à fait le problème).
Martin Tournoij
1

Parfois, un tel comportement peut résulter d'une configuration inhabituelle de mappages de touches dans votre .vimrc- par exemple, si vous avez quelque chose qui mappe deux ESCpressions de touches:

nmap <Esc><Esc> some_command_sequence

Ensuite, cela peut entraîner un dysfonctionnement de vim avec les touches fléchées.

Pierz
la source
La configuration décrite par l'OP est assez spécifique et elle affiche le comportement sans qu'un tel mappage soit en place. (Je l'ai testé.)
Rich