"N'utilisez jamais les touches fléchées dans Vim!"
J'ai entendu cela d'un orateur aléatoire, mais je n'ai pas eu l'occasion de lui demander pourquoi. De plus, si vous n'utilisez pas les touches de direction, comment pouvez-vous déplacer le curseur en mode Insertion ?
Réponses:
Utiliser les touches fléchées est considéré comme une mauvaise habitude, car si vous utilisez les touches fléchées, vous manquerez probablement de nombreuses fonctionnalités intéressantes de vim.
Lorsque les gens commencent à utiliser vim, ils ont tendance à rester en mode insertion car il s'agit davantage de l'édition de texte conventionnelle. Cependant, pour être efficace dans vim, vous ne devez être en mode insertion que lorsque vous saisissez du texte. Si vous souhaitez déplacer le curseur, vous devez être en mode normal. Vous devriez être en mode normal par défaut.
En mode normal, il existe un million de raccourcis pour se déplacer. Vous pouvez utiliser
hjkl
pour vous déplacer d'un espace à la fois ou par mots, par paragraphes, etc. Si vous êtes en mode normal, il ne sert à rien d'utiliser les touches fléchées au lieu de,hjkl
car elles sont plus éloignées.Il y a l'attitude que si vous utilisez les touches fléchées, vous utilisez vim "faux". La vérité est que vim a une courbe d'apprentissage vraiment très abrupte, alors pendant que vous étudiez, faites ce qui vous garde sain d'esprit. Quand j'ai commencé à utiliser vim, j'ai tout fait de la "mauvaise" manière et je n'ai eu aucun problème à rompre les habitudes une fois que j'ai appris plus des commandes de vim.
Par exemple, quand j'ai commencé, disons que je voulais changer le texte entre guillemets:
J'allais en mode insertion, je passais à la fin de la chaîne à l'aide des touches fléchées, j'appuyais sur la touche retour arrière jusqu'à ce que la chaîne disparaisse et j'entrais le nouveau texte.
Une meilleure solution consiste à placer votre curseur n'importe où dans la chaîne (mode normal), puis à appuyer sur ci". Cette volonté
change
in
"
. Cela supprimera tout entre les guillemets et vous mettra en mode insertion afin que je puisse saisir le nouveau texte.la source
ci<
etci)
travaille aussi, et vous n'avez pas à déplacer votre main du clavier à la souris. Si vous souhaitez naviguer au début des crochets, puis modifier le contenuf(ci(
fonctionne./want
et taper sur enter pour trouver le mot 'want', alors faites-leci"
.hjkl
): mappageup
etdown
à 2 clés qui ne se distinguent pas verticalement, et encore moins des touches gauche et droite ..... c'est une démonstration tragique d'arrogance aveuglée par une idéologie.Placement clé
En bref,
Vim
utilise leshjkl
touches comme interface de navigation car il s’agit d’un vestige de l’ancien terminal "ADM-3A", sur lequel ces touches étaient marquées par des flèches.Nouvelles habitudes
Le remplacement basé sur la lettre pour les touches de direction vous permet de naviguer dans le texte sans vous éloigner des mains de la configuration de frappe standard . C'est sans doute plus efficace et plus rapide que de déplacer votre main pour appuyer sur les touches fléchées. Comme indiqué dans la référence 2 (voir ressources), ceci n'est pas la fin des avantages: VIM dispose de nombreux autres raccourcis auxquels vous pouvez accéder sans bouger vos mains.
Ressources et mode insertion
Il existe quelques réponses très détaillées et précises aux 2 parties de votre question: en ce qui concerne le remplacement des touches fléchées, j’ai répondu de manière rapide et sommaire, mais pour votre question insérée , veuillez consulter les ressources répertoriées ci-dessous.
la source
hjkl
ne fonctionne pas en mode insertion, alors comment est-ce une réponse à la question?hjkl
vim ne dit pas pourquoi quelqu'un ne devrait jamais utiliser les touches fléchées, tout comme le fait que je puisse me rendre au travail à vélo n'explique pas pourquoi quelqu'un me dirait de ne jamais faire de jogging.Ce mantra stupide est souvent répété par les dactylographes tactiles pour qui la ligne d'arrivée est comme une seconde colonne vertébrale ou par les dactylographes non tactiles qui veulent avoir l'air cool. Pour les non-dactylographes, la ligne d'arrivée n'est tout simplement pas si spéciale et déplacer légèrement la main droite pour atteindre les flèches ne pose aucun problème.
Ce qui est important à considérer est ce que les gens qui répètent ce mantra proposent d'utiliser à la place.
La plupart du temps, ils insistent pour utiliser
hjkl
.Laissons de côté le fait que ces touches ne sont utilisées que parce que le clavier utilisé par l'auteur de vi n'avait pas de touches de direction physiques et que, par conséquent, tout argument contre les touches de direction est juste une rationalisation,
hjkl
ne sont de toute façon que légèrement meilleures que les flèches. Oui, le seul avantage de l'utilisation par-hjkl
dessus les flèches est que vous évitez ce petit mouvement de la main droite vers et depuis les flèches. Votre appel est de savoir si cet avantage en vaut la peine.Mais ce mouvement de la main droite n'est pas pourquoi à l' aide que les flèches est inefficace. Cela est inefficace, car ils vous empêchent de vous déplacer caractère par caractère et ligne par ligne, alors que la plupart des mouvements nécessaires à la modification de texte ont une portée beaucoup plus grande.
Marteler la flèche droite 13 fois est inefficace et ennuyeux. Est - ce que mieux marteler les
l
13 fois sur la touche? Non, c'est tout aussi stupide.Garder la flèche droite appuyée jusqu'à ce que vous atteigniez votre cible est moins ennuyeux, mais il est source d'erreurs et presque aussi inefficace que 13 coups en raison du ralentissement nécessaire et non déterministe à la fin. Est- ce mieux de garder la
l
touche appuyée? Non bien sûr que non.Heureusement, la plupart des kits d’outils graphiques offrent des combinaisons
Ctrl+Right
qui permettent de déplacer mot par mot ou d’accéder à EOL, au paragraphe suivant ou à un autre. Ces raccourcis nous aident à naviguer beaucoup plus rapidement et intelligemment qu'avec les flèches simples. Avons-nous la même chose avechjkl
? Non, nous pas. Nous pouvons utiliser un compte, si nous voulons, mais qui veut compter les caractères pour chaque mouvement? Faire14k
avecrelativenumber
est super, mais qu'en est-il des mouvements horizontaux? Pour les grands mouvements,hjkl
sont en réalité pires que les modificateurs + flèches. Et devine quoi? Les gros mouvements sont ce dont nous avons le plus besoin.Mais nous sommes des bâtards chanceux, notre éditeur préféré a des dizaines de mouvements qui tournent autour des deux flèches et
hjkl
:bBeEwW/?*#{}()
et ainsi de suite. Ces commandes sont infiniment plus puissantes quehjkl
et pour la plupart beaucoup plus logiques et intuitives si vous êtes habitué àCtrl+Right
et amis.Le passage de
<Right><Right><Right><Right><Right><Right><Right><Right><Right>
lalllllllll
ou même9l
est ridiculement inutile.Passer de
<Right><Right><Right><Right><Right><Right><Right><Right><Right>
à<C-Right>
est beaucoup mieux. À partir de là, le passage àw
est simple et rapide. Pas besoin de<nop>
vos flèches!Si ces commandes sont plus utiles, plus puissantes et plus intuitives que
hjkl
, pourquoi tant de blogueurs et commentateurs insistent-ils pour qu'ils remplacent les flècheshjkl
?J'ai. Aucune idée.
En conclusion,
hjkl
ont leur place dans notre toolbelt car nous devons toujours nous déplacer de 2 caractères ou lignes mais ce sont le plus souvent l'arbre qui cache la forêt. Méfiez-vous des personnes qui prêchent contre les flèches: ce qu'elles vous réservent peut ne pas être meilleur du tout.la source
hjkl
est inutile maishjkl
utile.D'autres ont décrit pourquoi on préfère utiliser d'autres moyens de déplacer le curseur, mais peu de choses ont été dites pour répondre à la question. Pourquoi est-il considéré comme une mauvaise idée d'utiliser des touches de direction.
Je pense que la raison principale (et @Squeezy y a fait allusion) est qu’à l’époque des terminaux comme le VT100, les touches fléchées produisaient une séquence d’échappement interprétée par le programme en cours d’exécution. (Étant donné que les touches de direction ne sont pas représentées en ASCII, leur saisie doit être communiquée de manière "spéciale".) La séquence d'échappement était généralement semblable à
en fonction des propriétés de votre terminal, de votre connexion et de votre mode de curseur . Si votre shell ou votre programme n'était pas configuré correctement pour le terminal, ils ne comprendraient pas la séquence d'échappement comme une touche fléchée.
Quand j'étais au collège, en me connectant à Ultrix via des terminaux VT100, si j'appuyais sur une flèche alors que j'étais en mode insertion, le
ESC
serait interprété comme "sortir du mode insertion", puis les suivantes[ A
étaient interprétées comme des commandes en mode normal . Évidemment pas ce que l'utilisateur veut ou attend!De nos jours, la gestion des terminaux et des touches fléchées semble être plus robuste, en particulier dans les environnements d'interface graphique. Mais les mêmes problèmes surviennent toujours lorsque vim over SSH ou Telnet est utilisé.
la source
L'utilisation des touches fléchées est mal vue car cela vous oblige à déplacer vos doigts du point de départ lorsque vous utilisez la disposition QWERTY et du pavé de caractères (?) Lors de l'utilisation de Dvorak ou de toute autre disposition.
la source
Les touches fléchées posent un problème - il était déjà connu dans vi - sur les connexions lentes, comme sur un modem à 1200 bauds. La flèche se traduit par une séquence ESC semblable à
ESC a
. Maintenant, lorsque le temps entre ESC et a devient trop long, vous finissez par entendre un BEL (ou voir un flash) suivi du mode append. Cela n'apparaîtra pas avec leshjkl
touches.la source
ESC [ A
est ce que vous faites allusion?ESC [ A
est un terminal DEC VT-100 (le terminal ANSI était fortement dérivé de la flèche DEC VT-100). IIRC,ESC A
était la flèche ADM-3A, ou peut-être la flèche DEC VT-52. Le point reste le même, cependant, leESC
caractère envoyé avec la touche fléchée était facilement confondu avec leESC
texte saisi manuellement.Concernant la deuxième question:
De même, pour celui qui est maître et qui dédie les touches fléchées, le concept de "mode" n'existe pas non plus.
Le maître ajoute un nouveau texte à l' aide pas un mode d'insertion, mais plutôt insérer complètes ou de remplacement des commandes qui commencent par un opcode tel que
i
,o
oucw
qui est suivi par un texte de charge utile, et a mis fin parESC
. Les commandes ont une syntaxe et la machine parcourt donc les états en acceptant la syntaxe des commandes, mais dans le modèle du maître de l'éditeur, ceux-ci ne donnent pas lieu à un mode. Ce que les apprentis appellent naïvement «mode», c’est au maître un état de commande inachevé, une situation extrêmement odieuse que le maître évite.Chaque fois que le maître réalise, alors qu’il est au milieu d’une commande d’insertion ou de remplacement, ce texte doit être inséré ou supprimé à la position de caractère suivante indiquée par le curseur, le maître termine la commande d’insertion et libère l’une des dizaines de les commandes de mouvement (recourir au plus humble
hjkl
si un moyen plus puissant n'est pas évidemment applicable).De plus, comme le maître est rarement distrait de manière à laisser une commande inachevée, il ne fait que rarement, voire jamais, émettre un bip de la part de l'éditeur en raison de la saisie d'un superflu
ESC
émis "juste au cas où".(Cependant, lorsque le réseau est en retard ou que la machine est embourbée, le maître martèle la
ESC
clé furieusement et de manière répétée, comme tout le monde.)la source
vi
la commande insert est un mode, pour être honnête, nous devons identifier tous ces modes dans d’autres éditeurs et les appeler modaux. Par exemple, lorsque nous appuyons sur Ctrl-X dans Emacs, nous sommes dans un "mode" dans lequel il est possible, par exemple, d'appuyer sur Ctrl-S pour enregistrer le document, ce qui ne fonctionnera pas en dehors de ce "mode".la source
Oui, pour bon nombre des raisons mentionnées ci-dessus, il
vi
a été écrit à l'origine pour être utiliséhjkl
, mais " jamais " est une assez grosse déclaration.J'ai tendance à modifier
vim
(et les autres outils que j'utilise) de se comporter comme je le souhaite. Cela fonctionne très bien sur ma machine, mais en tant que développeur intégré, je ne peux pas toujours choisir ce qui se trouve sur les machines que je supporte. Je rencontre des machines plus anciennes dans lesquelles lahjkl
navigation estvi
occasionnelle. Je finis par obtenir les codes de contrôle insérés dans mon fichier pendant une seconde ou deux jusqu'à ce que je ressaisisse mon habitude et que je passe àhjkl
.La seule raison valable pour laquelle je peux proposer de "ne jamais utiliser les touches de direction dans Vim!" Cela vous permet d’utiliser des machines qui ne peuvent pas gérer les touches fléchées. Cela semble être une raison assez mince pour dire « jamais ».
la source
La principale raison pour laquelle je décourage les gens d'utiliser les touches fléchées est explicite, car cela vous permet de vous déplacer en mode insertion.
L'un des problèmes les plus étranges rencontrés lors de l'apprentissage de vim par les nouveaux arrivants est que la commande d'annulation de vim annule la dernière action et non la dernière frappe . Beaucoup de mes amis restent en mode insertion tout le temps car il n'y a jamais de raison de le quitter. Quand ils me demandent "Comment puis-je annuler?" Je leur réponds en tapant sur la lettre du mode commande: ils sont frustrés lorsque vim efface tout le fichier.
"Vim est un éditeur de texte assez inutile s'il ne parvient pas à annuler les choses."
Il est difficile d'utiliser un outil avant d'avoir appris comment.
Vim ne devient utile qu'après avoir appris à l'utiliser. Le pouvoir de vim réside dans la manière dont vous pouvez lui dire de "refaire cette chose" ou de "défaire cette chose" ou de "ne faire cette chose que lorsque je frappe cette touche de raccourci macro" par le biais de la mémoire musculaire subconsciente. Si "cette chose" devient "tapez tout le fichier du début à la fin", je suis d'accord, vim n'est pas du tout utile.
C'est pour cette raison que vous ne devriez entrer du texte que lorsque vous y êtes
insert mode
. Éviter les touches de direction n'est qu'un des moyens que nous avons trouvés pour vous aider à devenir un meilleur utilisateur de vim, plus rapidement.la source
Exécuter vim tout en étant inséré dans mon appareil Android, qui exécute un démon ssh sous kbox, m'a amené à sortir de ma zone de confort. Étant donné qu'Anroid Terminal Emulator sur l'appareil utilise des boutons de volume pour remplacer les combinaisons spéciales (touches Ctrl + peu importe), certaines touches que j'utiliserais normalement sur le clavier ne fonctionnent pas dans cette situation.
Par exemple, la touche Insérer ne fonctionne pas dans cet environnement, je l'utilise donc
I
pour passer en mode insertion. La touche Echap, que j'utilise habituellement pour échapper au mode insertion, ne fonctionne pas non plus, alors je l'utilisectrl + [
plutôt pour échapper. Les touches Home et End ne fonctionnent pas comme je suis habitué. Au lieu de cela, je compte sur les raccourcis0
et les$
raccourcis avec lesquels je ne me suis jamais ennuyé pour atteindre le début ou la fin d'une ligne.Quoi qu'il en soit, les touches fléchées fonctionnent toujours comme d'habitude dans ma situation, mais il est bon de savoir que les raccourcis clavier minimalistes sont là.
la source
écrivez simplement la commande suivante avant d'écrire dans vim: -
Un problème avec cela est que vous devrez peut-être l'écrire à chaque fois.
la source
Voici mes 2 ¢.
Faites ce que vous sentez à l'aise. Si vous utilisez différents éditeurs, il peut être plus facile d’utiliser les touches fléchées pour plus de cohérence.
D'autre part, il est absolument génial que vi (et vim) ne nécessite aucune clé spéciale, sauf peut-être. Vous pourriez probablement pirater une ancienne IBM selectric pour qu'elle fonctionne comme un terminal.
L'autre chose à surveiller est que les touches fléchées peuvent ne pas fonctionner comme prévu. J'ai utilisé des terminaux où ils ne fonctionnaient pas. Je ne sais pas exactement comment elles sont mises en œuvre dans Vim mais je suis à peu près sûr que ce n'est pas uniforme. Ma mémoire irrégulière semble même rappeler une implémentation dans laquelle elles ont été implémentées en tant que macros vim.
la source
Le nom du jeu avec les éditeurs de texte améliorés semble être "se déplacer rapidement" et réduire les mouvements inutiles / répétitifs. Il y a un peu de temps perdu lorsque vous passez des touches alphabétiques aux touches fléchées (en fonction des dimensions du clavier) puis revient à la ligne de départ. Toutefois, si vous pouvez accéder à la touche ESC avec les modes de commutation entre votre main gauche et l'annulaire devient un mouvement fluide et que vous gagnerez en vitesse au cours d'une session de montage.
Et voici la clé de la deuxième partie de votre question: sortez du mode insertion en appuyant sur ESC avec votre gauche et déplacez-vous avec hjkl avec votre droite. Finalement, vous pourrez le faire sans perdre de temps.
Cela étant dit, je n'ai jamais réussi à obtenir quelque chose avec Vim avant d'essayer certaines des choses mentionnées ici , le plus important étant la section " Soyez efficaces: mappages de raccourcis "
la source