web-dev-qa-db-fra.com

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

Lorsque j'ai essayé d'utiliser les touches de direction en mode insertion dans l'éditeur vi, 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  Je reçois C.

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

177
bvb

Si vous n'avez pas déjà un fichier .vimrc 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. :)

220
Gaurav Manchanda

Installez vim -> Ceci résoudra le problème.

Sudo apt-get install vim

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

Continuez ensuite pour ouvrir les fichiers normalement :

vi desired-file
76
sthysel

Avec vi, en cliquant sur i vous activez la commande pour Insérer du texte .
Cette commande vous permet d’insérer du texte dans votre fichier.
Et à droite, en cliquant:

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

Jusqu'à ce que vous désactiviez cette commande.
Pour désactiver une commande dans vi: cliquez simplement sur Esc
Ensuite, vous retrouverez une utilisation normale de vos touches de direction:

  •  à monter,
  •  descendre,
  • ...

Pour votre information, voici quelques commandes vi:
De ceci source .

:xReturn  quitte vi , écrit un fichier modifié dans un fichier nommé dans l'invocation d'origine
:wqReturn  quitte vi , écrit un fichier modifié dans un fichier nommé dans l'invocation d'origine
:qReturn  quitter (ou quitter) vi
:q!Return  quitter vi même si les dernières modifications n'ont pas été enregistrées pour cet appel vi

  déplace le curseur d'une ligne vers le bas
  déplace le curseur vers le haut d'une ligne
  déplacer curseur à gauche d'un caractère
  déplace le curseur à droite d'un caractère

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

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

r remplace un seul caractère sous le curseur (non Esc nécessaire)
cw change le mot actuel avec le nouveau texte, en commençant par le caractère situé sous le curseur, jusqu'à ce que Esc frappé
x effacez un seul caractère sous le curseur
Nx effacez N caractères, en commençant par le caractère situé sous le curseur
dw supprime le mot simple commençant par le caractère situé sous le curseur
C change (remplace) les caractères de la ligne en cours jusqu'à ce que Esc frappé
D supprime le reste de la ligne, en commençant par la position actuelle du curseur

dd supprimer toute la ligne en cours
Ndd delete N lignes, en commençant par la ligne en cours; par exemple, 5dd supprime 5 lignes
yy copier (tirer, couper) la ligne en cours dans le tampon
Nyy copier (tirer, couper) les N lignes suivantes, y compris la ligne en cours, dans la mémoire tampon
p collez la ou les lignes dans la mémoire tampon dans le texte situé après la ligne en cours.

0 (zero) déplace le curseur au début de la ligne en cours (celle avec le curseur)
$ déplace le curseur à la fin de la ligne en cours
w déplace le curseur au début du mot suivant
b déplace le curseur au début du mot précédent
:0Return ou 1G déplace le curseur vers la première ligne du fichier
:nReturn ou nG déplace le curseur vers la ligne n
:$Return ou G déplace le curseur vers la dernière ligne du fichier

/string search forward pour l'occurrence d'une chaîne dans le texte
?string recherche en arrière pour l'occurrence d'une chaîne dans le texte
n déplace vers la prochaine occurrence de la chaîne de recherche
N déplace vers la prochaine occurrence de la chaîne de recherche dans la direction opposée

27
Boris

Pour désactiver l’impression des lettres en appuyant sur les flèches en mode édition, procédez comme suit:

vi $HOME/.exrc 

(créez un fichier s'il n'existe pas), puis ajoutez-y la ligne set nocompatible et sauvegardez-le.

17
Aniket Thakur

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

  • mode de commande
  • mode d'entrée
  • 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 les touches fléchées ou utilisez hjkl clés. Notez que cela ne fonctionne que si vous n’avez pas appuyé sur i (ou n’importe quel autre mode d’entrée en entrant une commande comme aAI).

La raison de "B" peut être parce que les touches fléchées en mode de saisie ne fonctionnent pas comme des touches fléchées, alors appuyez simplement sur Esc pour passer en mode défaut à tout moment. Quand passer en mode de saisie, appuyez sur i ou aet pour naviguer, appuyez simplement sur i clé et utilisez les touches fléchées ou hjkl.

11
ps_cool

J'ai eu exactement le même problème, mais pas seulement sur ma machine locale, mais aussi sur les connexions via PuTTY sur une machine à sous dans une machine Win7 VM sur un récepteur Citrix. L’hôte local et les hôtes distants montrent qu’une réinstallation d’Ubuntu a eu exactement le même problème.

Après avoir découvert que

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

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

Sudo apt-get install console-data
7
kitingChris

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

Vérification des alternatives: /etc/alternatives/vi/usr/bin/vim.tiny

Donc, vi est vim.tiny et utilise /etc/vim/vimrc.tiny.

Et dans 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.

Donc, soit installer vim, soit changer le fichier vimrc.tiny, ou créer votre propre ~/.vimrc qui devrait contenir la ligne:

set nocompatible
3
Gunstick

Remarque:

Il y a de bonnes informations dans les autres messages, mais aucun des messages n'a tenté d'expliquer pourquoi ce problème est survenu. Beaucoup de gens sont obligés de trébucher à l'avenir. Aussi, pourriez-vous marquer cette question comme résolue puisque 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 qui reviennent aux 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 le penser comme ceci: vi est le noyau et vim le développe.

Probablement comment vous avez découvert le comportement :

Pour que vous ayez découvert ce problème, vous avez appuyé sur "i" pour entrer en mode insérer, puis vous avez utilisé les touches de direction pour naviguer dans la ligne et le point d'édition corrects. C'est ce qui a causé votre problème de caractère inattendu.

Solution 1 ou 2

1) vi someFile Lors de l'utilisation de 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 adapté aux modèles de Shell, les pages de manuel deviennent votre meilleur ami. Exemple: man vi ou man vim


Valide que Vim est installé .

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

dpkg --list | grep vim

Si vous obtenez quelque chose de similaire à cela, 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 la commande Invite ne renvoie 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 n'utilisez vi ou vim que lorsque vous cherchez sur Internet comment réparer quelque chose et que vous oubliez de taper vimname__, il existe un moyen de le réparer pour l'avenir. Je vous conseille 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 un avenir peu fréquent, vous obtenez vim sans ce "oops!" moment. Vous pouvez toujours supprimer un alias plus tard.

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

alias vi='vim'

Appuyez sur Escpuis tapez :wq. Maintenant, vous devez recharger le fichier. Tapez source .bashrc Tout autre shell ouvert après avoir effectué ces modifications chargera automatiquement le fichier .bashrc.

2
D75

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

 export TERM=xterm
1
Jasper Nuyens

Sur certains systèmes, l'option nocompatible n'est pas disponible ou ne résoudra pas le problème si un plug-in casse la fonctionnalité de la flèche. Voici une solution de contournement ...

Editez le fichier .exrc pour 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 modifier le nom nmap et ignorer le a suivant, comme suit:

nmap! ^[OA ^[k

etc.

Voici les combinaisons de touches nécessaires pour les produire (en montrant le premier seulement):

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

Cela sort du mode d’édition, se déplace dans la direction voulue et revient en mode d’édition. Ceci est nécessaire pour surmonter Vi en lisant la séquence d'échappement sous la forme d'une séquence littérale <ESC> <O> <A>, etc.

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

1
Dominic Comtois

L'éditeur vi traditionnel ne reconnaît pas les touches de direction (... de suite). 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 pendant l'édition sur le vi vit traditionnel.)
1
MadMike

Pour le VI, créez ou modifiez le fichier "~/.exrc" ou VIM créez ou modifiez le fichier "~/.vimrc" défini ou ajouté à la ligne.

set nocompatible

Au moment d'écrire ces lignes, des éloges sur le deuxième article le plus voté se demandent pourquoi leur inscription n'a pas été acceptée. La raison en est qu'il y a des hôtes qui n'autorisent pas l'installation d'autres éditeurs. Même dans ce cas, vim a parfois les mêmes effets, il y a donc une foule d’informations utiles tirées des deux premières entrées. Je ne peux pas commenter, mais j'espère que cela clarifie les raisons pour lesquelles ni l'une ni l'autre n'est correcte à 100% dans 100% des cas.

1
tuxdalinuxpenguin

Pour une raison quelconque, Ubuntu a omis d’initialiser envvar HOME pour l’utilisateur root sur mon nouveau 18.04 VPS. Si tel est le cas, vi ne peut pas trouver le fichier .vimrc. Le problème ne se produit pas pour les utilisateurs normaux (dans/home /).

Pour vérifier la variable:

echo $HOME

S'il en résulte une ligne vide, la variable n'est pas définie. Le problème est parti après

export HOME=/root

J'ai déplacé la commande dans le fichier /root/.bashrc (je ne sais pas où cela est généralement défini).

0
Erik

Sur cette machine je devais make sure que

set nocompatible

est le last entry in ~/.vimrc. Ou au moins une des dernières entrées, en particulier plus aucun plugin n'est chargé après.

HTH

0
Gen.Stack