Question Frapper les touches fléchées ajoute des caractères dans l'éditeur vi


Lorsque j'ai essayé d'utiliser les touches fléchées en mode insertion dans vi éditeur les caractères suivants sont insérés dans l'éditeur:

  • pour  Je reçois B,
  • pour  J'ai un,
  • pour  Je reçois D,
  • pour  J'ai c

S'il vous plaît aidez-moi à résoudre ce problème.


143
2017-10-05 05:04


origine


J'ai eu un bon rire en lisant le titre;) Je suis sûr qu'il existe un XKCD pour le sentiment fantasmagorique (pour les utilisateurs novices) lorsque la touche fléchée imprime des lettres. - vvy


Réponses:


Si vous n'avez pas déjà un .vimrc fichier dans votre répertoire personnel, créez-en un en utilisant ceci:

vim ~/.vimrc

Ajoutez cette ligne en haut du fichier:

set nocompatible

Enregistrez le fichier et cela devrait résoudre le problème pour vous. :)


177
2017-10-05 07:23



Je devais créer un fichier .exrc pour vi, mais régler nocompatible fonctionnait très bien. - tgun926
Il y a un truc si vous utilisez vi au lieu de vim, vous devez faire la même configuration mais dans le ~/.exrc fichier. - tzi
Travaillé. Mais pourquoi ce correctif est-il requis? Pourquoi par défaut il ne gère pas les flèches? - Mohit
Par défaut, vi / vim est programmé pour remplacer les touches fléchées par les touches h, j, k, l. Ceci est fait pour que vous n'ayez pas à vous déplacer depuis la zone principale du clavier. - Gaurav Manchanda
problème suivant est backspace, solution: askubuntu.com/questions/296385/… - daVe


Installer vim -> Cela résoudra le problème.

sudo apt-get install vim

Il existe de nombreux tutoriels vim / vi sur youtube ou sur le Web en général. Pour votre problème, vois ici

Alors continuez à ouvrir les fichiers comme d'habitude:

vi desired-file

47
2017-11-21 08:03



travaillé pour moi - même si je ne sais pas pourquoi cela est différent du vim que je lançais précédemment - Amos Folarin
Cela devrait être la réponse acceptée (mais il semble que personne n’accepte). C'est la manière la plus simple / la plus propre de faire en sorte que vim soit complètement «modernisé» sur une console d'ordinateur (au lieu des terminaux tty / ANSI). - Lockszmith
oui je suis d'accord avec toi Lockzsmith, cela aurait dû être la réponse acceptée - niccolo m.
Cela a fonctionné pour moi. Je suis surpris que raspian vienne avec la version de vi / vim ... bien que tous les tutoriels vous disent d'utiliser nano, ce qui est difficile à dire, vim est vraiment meilleur. La seule raison pour laquelle j'utilise vim plutôt que nano est que vim est toujours sur toutes les machines et que le nano l'est probablement. - ArtOfWarfare


Avec vi, en cliquant sur je vous activez la commande pour Insérer texte.
Cette commande vous permet d'insérer du texte dans votre fichier.
Et bien, en cliquant:

  • sur  il va insérer un "A",
  • sur  il insérera un "B",
  • ...

Jusqu'à vous désactivez cette commande.
Désactiver une commande dans vi : cliquez simplement sur Esc
Et puis, vous récupérerez une utilisation normale de vos touches fléchées:

  •  à monter,
  •  descendre,
  • ...

Pour info, en voici quelques vi commandes:
De ceci la source.

:xRevenir  quitter vi, écrivant le fichier modifié dans un fichier nommé dans l'invocation d'origine
:wqRevenir  quitter vi, écrivant le fichier modifié dans un fichier nommé dans l'invocation d'origine
:qRevenir  quitter (ou quitter) vi
:q!Revenir  quitter vi même si les dernières modifications n'ont pas été enregistrées pour cet appel vi

  bouge toi curseur vers le bas d'une ligne
  bouge toi curseur en haut d'une ligne
  bouge toi le curseur a laissé un caractère
  bouge toi curseur droit un caractère

u  annuler tout ce que tu viens de faire; une simple bascule
.  refaire tout ce que vous venez de faire

i  insérer texte avant curseur, jusqu'à Esc frappé
I  insérer texte au début de la ligne courante, jusqu'à Esc frappé
a  ajouter texte après curseur, jusqu'à Esc frappé
A  ajouter texte à la fin de la ligne actuelle, jusqu'à Esc frappé
o  ouvrir et mettre le texte dans une nouvelle ligne en dessous de la ligne actuelle, jusqu'à ce que Esc frappé
O  ouvrir et mettre le texte dans une nouvelle ligne au-dessus de la ligne courante, jusqu'à ce que Esc frappé

r  remplacer caractère unique sous le curseur (non Esc nécessaire)
cw  changement le mot courant avec le nouveau texte, en commençant par le caractère sous le curseur, jusqu'à ce que Esc frappé
x  effacer caractère unique sous le curseur
Nx  effacer N caractères, en commençant par le caractère sous le curseur
dw  effacer le mot unique commençant par le caractère sous le curseur
C  changement (remplacer) les caractères de la ligne en cours, jusqu'à ce que Esc frappé
D  effacer le reste de la ligne, en commençant par la position actuelle du curseur

dd  effacer toute la ligne actuelle
Ndd  effacer N lignes, en commençant par la ligne en cours; par exemple, 5dd supprime 5 lignes
yy  copie (yank, couper) la ligne actuelle dans le tampon
Nyy  copie (Yank, couper) les N lignes suivantes, y compris la ligne en cours, dans le tampon
p  collerla ou les lignes du tampon dans le texte après la ligne en cours

0 (zéro) bouge toi curseur au début de la ligne courante (celle avec le curseur)
$  bouge toi curseur à la fin de la ligne en cours
w  bouge toi curseur au début du mot suivant
b  bouge toi retour au début du mot précédent
:0Revenir ou 1G  bouge toi curseur sur la première ligne du fichier
:nRevenir ou nG  bouge toi curseur sur la ligne n
:$Revenir ou G  bouge toi curseur à la dernière ligne du fichier

/string  chercher en avant pour l'occurrence de chaîne dans le texte
?string  chercher en arrière pour l'occurrence de chaîne dans le texte
n  bouge toi à la prochaine occurrence de la chaîne de recherche
N  bouge toi à la prochaine occurrence de la chaîne de recherche dans la direction opposée


26
2017-10-05 06:52



La touche fléchée vers le bas insérant "B" n'est pas un comportement attendu. Les touches fléchées doivent déplacer les curseurs vers le haut / bas / la gauche et la droite, quel que soit le mode d'insertion. - James Wong
@JamesWong En fait, ça est comportement attendu, car c'est ainsi que Vi a été programmé à l'origine. VIM, (officieusement), le successeur de Vi, est en mode compatible Vi par défaut, ce qui inclut ce comportement pour les touches fléchées. Donc, le mot "devrait" est simplement subjectif, car VIM fait réellement ce qu’il a été programmé pour faire. - villapx
@villapx - Non, le comportement n'est pas attendu. Le comportement attendu est défini par ce que votre utilisateur typique attend. La personne habituelle utilisant vi / vim l'utilise parce que c'est ce qui est installé sur un serveur dont elle a besoin de configurer rapidement et qu'elle ne fera pas assez pour s'installer avec autre chose. Peu de personnes choisissent d'utiliser vim lorsqu'une option leur est donnée, et peu d'entre elles connaissent toutes ces caractéristiques ou ces bizarreries. L'utilisateur typique attend des flèches pour déplacer le curseur - c'est le comportement attendu. Tout le reste est un comportement inattendu, et devrait être écrit comme un bogue à quel point il est inattendu. - ArtOfWarfare
@ArtOfWarfare Vous êtes libre de définir "attendu" comme vous le souhaitez. Je le définis comme ce qui est attendu par l'auteur du code, car ils étaient très clairs dans le manuel VIM sur la manière dont cela est censé se comporter ... de :help compatible: "Par défaut, cette option est activée et les valeurs par défaut de Vi sont utilisées pour les options. Cette option par défaut a été choisie pour les personnes souhaitant utiliser Vim comme Vi, sans connaître l'option" compatible ". . " - villapx
@ArtOfWarfare Fondamentalement, l’auteur de VIM avait clairement à l’esprit un public spécifique lors de la rédaction de cette partie du code, et juste parce que ce public est différent de ce que votre le public serait, ne veut pas dire que c'est un bug. Vous pouvez le classer en tant que bogue si vous le souhaitez, mais soyez prêt à être réprimandé par les fondamentalistes du VIM (et en réalité toute personne qui respecte le manuel, les aficionados de la RTFM). - villapx


Pour désactiver l'impression des lettres en appuyant sur les flèches en mode édition, vous pouvez effectuer les opérations suivantes.

vi $HOME/.exrc 

(créer un fichier s'il n'existe pas) puis ajouter une ligne set nocompatible à elle et sauver.


16
2017-08-08 12:46



Cela devrait être la réponse acceptée. Je vous remercie! - eis
Je mets ça dans .vimrc. Pourquoi est-ce que vous le mettez dans .exrc? - pauljohn32
Vim sources à la fois - voir la sortie de :version pour ordre de chargement (également :h .exrc ou :h init). Je suppose que quelqu'un pourrait vouloir un paramètre à la fois dans vi et vim, ou pourrait être une simple force d'habitude. - William Robertson


Il existe trois modes dans l'éditeur vi à savoir:

  • mode de commande
  • mode de saisie
  • mode par défaut.

Lorsque vous ouvrez un fichier, vous êtes en mode par défaut. Maintenant, si vous voulez aller à une position spécifique dans votre texte, utilisez simplement les touches fléchées ou utilisez h, j, k, l clés. Notez que cela ne fonctionnera que lorsque vous n'avez pas appuyé sur je (ou tout autre mode de saisie entrant dans la commande comme une, UNE, je).

La raison de «B» peut être que les touches fléchées du mode de saisie ne fonctionnent pas comme des touches fléchées. Appuyez simplement sur Esc pour passer en mode par défaut à tout moment. Quand passer au mode de saisie appuyez sur je ou une, et pour naviguer, appuyez simplement sur je clé et utiliser les touches fléchées ou h, j, k, l.


11
2017-11-21 07:14





J'ai eu exactement le même problème, mais pas seulement sur ma machine locale, mais aussi sur les connexions via un mastic sur une machine Sles dans une VM Win7 sur un récepteur Citrix. L'hôte local et les hôtes distants ont tous deux le même problème après une réinstallation d'Ubuntu.

Après avoir découvert que

$ localectl list-keymaps 
Couldn't find any console keymaps.

Provoque ce comportement étrange de VI J'ai installé le paquetage console-data qui résout le problème!

sudo apt-get install console-data

6
2018-01-18 10:53





Toutes les explications données sont un peu bizarres. J'ai installé vi mais pas vim.

Vérification des alternatives: /etc/alternatives/vi &flèche droite /usr/bin/vim.tiny

Alors vi est vim.tiny, et il utilise /etc/vim/vimrc.tiny.

Et en vimrc.tiny vous trouvez la ligne suivante:

set compatible

Ce qui est presque la seule chose dans ce fichier. Notez que dans /etc/vim/vimrc il utilise nocompatible.

Alors installez vim ou changez le vimrc.tiny fichier, ou créez le vôtre ~/.vimrc qui devrait contenir la ligne:

set nocompatible

3
2018-01-10 22:11



Je ne suis pas sûr de ce qui est si bizarre. Vous finissez par suggérer 1. installer Vim - askubuntu.com/a/220072/158442, 2. créer ~/.vimrc et mise nocompatible: askubuntu.com/a/353944/158442ou 3. modification d'un fichier système. Seule la suggestion de modifier /etc/vim/vimrc.tiny est nouveau, et pourtant vous appelez des réponses bizarres tout en suggérant la même chose. - muru


L'éditeur vi traditionnel ne reconnaît pas les touches fléchées (... afair). Il y a deux solutions:

  1. utiliser vim au lieu de vi
  2. utilisez h, j, k et l pour naviguer (vous ne pouvez pas naviguer en éditant sur le vi btw traditionnel).

1
2017-10-05 05:51



Ce n'est pas vrai Recherchez les applications basées sur terminfo / termcap et libcurses. J'utilise vi depuis 1990 dans Xenix, SCO Unix, AIX, les anciens hpux et autres, et les pure-vi des 80 supportent déjà les mappages terminfo / termcap. - Luciano
@ James-Wong alors je devrais reformuler ma réponse. Pour "vi pur sous Ubuntu ne fait pas ..." - MadMike
... et ceci était un commentaire à @luciano - MadMike


Remarque:

Il y a de bonnes informations dans les autres messages mais aucun des messages n'a essayé d'expliquer Pourquoi ce comportement s'est produit. Beaucoup de gens sont obligés de trébucher sur cela à l'avenir. De plus, pourriez-vous marquer cette question comme résolue, car l'un des messages précédents vous a probablement aidé?


Voici une explication:

Vi est un éditeur qui existe depuis longtemps, avec des racines dans les systèmes Unix. C'est un bon outil mais il a été itéré et maintenant il y a mieux. Vim a été écrit plus tard et est cette itération. Les gens se réfèrent généralement à vi comme «vim-minimal» et vim est une version «améliorée» de vi. Vous pouvez y penser comme ceci: vi est le noyau et vim se développe dessus.

Probablement comment vous avez découvert le comportement:

Pour que vous ayez découvert ce problème, vous avez appuyé sur "je"entrer dans insérer mode, puis utilisez les touches fléchées pour naviguer sur la ligne et le point d’édition appropriés. C'est ce qui a causé votre problème inattendu.

Solution 1 ou 2

1) vi someFile En utilisant vi, déplacez-vous d'abord vers le point d'édition, puis entrez en mode insertion.

2) vim someFile Utilisez simplement vim dès le début.

Je ne saurais trop insister pour lire le manuel (pages de manuel) ou utiliser -h pour obtenir de l'aide. Une fois que vous vous êtes ajusté aux motifs du shell, les pages de manuel deviennent votre meilleur ami. Exemple: man vi ou man vim


Validez que Vim est installé.

Ouvrez une fenêtre de console et exécutez:

dpkg --list | grep vim

Si vous obtenez quelque chose de similaire, vous pouvez simplement commencer à utiliser vim.

~ $ dpkg --list | grep vim
ii  vim         2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor
ii  vim-common  2:7.4.052-1ubuntu3  amd64  Vi IMproved - Common files
ii  vim-runtime 2:7.4.052-1ubuntu3  all    Vi IMproved - Runtime files
ii  vim-tiny    2:7.4.052-1ubuntu3  amd64  Vi IMproved - enhanced vi editor - compact version

Si l'invite de commande ne contient rien, vim is n'est pas installé. Utilisez les exemples ci-dessous pour mettre à jour vos référentiels, puis installez vim.

sudo apt-get update
sudo apt-get install vim

Si vous utilisez vi ou vim uniquement lorsque vous recherchez sur Internet comment réparer quelque chose et que vous oubliez de taper vim, il y a un moyen de le réparer pour l'avenir. Je vous préviens de faire attention. Vous pouvez utiliser un alias pour écraser vi avec une référence à vim de sorte que peu importe ce que vous tapez dans le futur peu fréquent, vous obtenez vim sans cela "oups!" moment. Vous pouvez toujours supprimer un alias ultérieurement.

Type vim .bashrc. Descendez à la ligne vide avec seulement un ~ (ou à toute autre ligne commençant par alias (donc ils sont regroupés) puis appuyez sur la je touche pour entrer dans le mode -insert. Sur sa propre ligne, entrez les informations suivantes:

alias vi='vim'

presse Esc puis tapez :wq. Maintenant, vous devez recharger le fichier. Type source .bashrc Tout autre shell qui s'ouvre après avoir effectué ces modifications chargera automatiquement le fichier .bashrc.


1
2017-10-30 04:20





Cela peut aussi être dû à la TERM variable; le définir par exemple comme ceci:

 export TERM=xterm

1
2017-07-07 13:54



Cela a résolu le problème pour moi où les autres réponses ne l'ont pas été. Merci! - greg


Sur certains systèmes, le nocompatible L'option n'est pas disponible ou ne résout pas le problème si un plug-in brise les fonctionnalités des touches fléchées. Voici une solution de contournement ...

Modifier le .exrc fichier à inclure les lignes suivantes:

map! ^[OA ^[ka
map! ^[OB ^[ja
map! ^[OC ^[la
map! ^[OD ^[ha

Ou, si le problème existe uniquement en mode normal, vous pouvez passer à nmap et passez le suivant a, comme suit:

nmap! ^[OA ^[k

etc.

Voici les principales combinaisons nécessaires pour les produire (en affichant uniquement la première):

map! <CTRL-V><Up-Arrow> <CTRL-V><ESC>ka

Cela échappe au mode édition, se déplace dans la direction souhaitée et rentre en mode édition. Ceci est nécessaire pour vaincre Vi en lisant la séquence d'échappement sous la forme d'une séquence de littéral <ESC> <O> <A>, etc.

La source: https://hea-www.harvard.edu/~fine/Tech/vi.html


1
2018-06-08 02:33