Question Pourquoi les touches fléchées ne sont pas recommandées dans Vim


"N'utilisez jamais les touches fléchées dans Vim!"

J'ai entendu cela d'un interlocuteur au hasard, mais je n'ai pas eu la chance de lui demander pourquoi. De plus, si vous n'utilisez pas les touches fléchées, comment pouvez-vous déplacer le curseur Insérer mode?


112


origine


Les réponses historiques à cette question sont intéressantes. Les diatribes religieuses le sont moins. - Isaac Rabinovitch
Bonne question. Cela me gêne toujours à propos de vi [m], en tant qu'utilisateur du clavier Dvorak ça craint vraiment! - wim
Je me souviens lors de la première utilisation de vi, il y a de nombreuses années, un collègue senior m'a conseillé "Assurez-vous d'apprendre à utiliser les touches h, j, k et l car un jour vous vous retrouverez sur un site client où la flèche les touches ne fonctionnent pas et vous aurez l'air d'une tête complète si vous ne pouvez même pas travailler vi. " - Ergwun
En mode insertion, vous pouvez toujours déplacer le curseur en utilisant Ctrl-O puis une commande en mode normal, et il reviendra en mode insertion. Vérifiez également CTRL-G CTRL-J et CTRL-G CTRL-K qui déplaceront le curseur sur la ligne suivante et précédente, à la colonne que vous avez commencé à insérer. - Benoit
Au fil des ans, j'ai développé de nombreuses mauvaises habitudes. Je pense que je dois l'utiliser sur une connexion très lente, pour me forcer à utiliser de meilleures habitudes. - aidan


Réponses:


L'utilisation des touches fléchées est considérée comme une mauvaise habitude, car si vous utilisez les touches fléchées, vous perdez probablement de nombreuses caractéristiques de vim.

Lorsque les utilisateurs commencent à utiliser vim, ils ont tendance à rester en mode insertion car cela ressemble plus à l’édition de texte classique. Pour être efficace en vim, vous ne devez être en mode insertion que lorsque vous entrez du texte. Si vous voulez déplacer le curseur, vous devriez être en mode normal. Vous devriez être en mode normal par défaut.

En mode normal, il y a un million de raccourcis pour se déplacer. Vous pouvez utiliser hjkl pour vous déplacer d'un espace à la fois ou vous déplacer par mots, paragraphes, etc. Si vous êtes en mode normal, il est inutile d'utiliser les touches fléchées au lieu de hjkl puisqu'ils sont plus loin.

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 raide, alors pendant que vous apprenez à faire tout ce qui vous permet de rester sain d'esprit. Quand j'ai commencé à utiliser vim pour la première fois, j'ai tout fait "mal" et je n'ai eu aucun problème pour briser les habitudes une fois que j'ai appris les commandes de vim.

À titre d'exemple, lorsque j'ai commencé, disons que je voulais changer le texte entre guillemets:

String mystring = "I want to change this";

Je voudrais aller en mode insertion, déplacez-vous à la fin de la chaîne en utilisant les touches fléchées, appuyez sur retour arrière jusqu'à ce que la chaîne a disparu, et entrez le nouveau texte.

Une méthode bien meilleure consiste à placer le curseur n'importe où dans la chaîne (mode normal), puis appuyez sur cje". Cette volonté change  in  ". Cela supprimera tout ce qui se trouve entre les guillemets et vous mettra en mode insertion pour que je puisse entrer le nouveau texte.


168



@ ott-- ci< et ci) travailler aussi, et vous n'avez pas à déplacer votre main du clavier à la souris. Si vous souhaitez naviguer jusqu'au début des parenthèses et ensuite modifier le contenu f(ci( travaux. - Matthew Finlay
"mettre votre curseur n'importe où dans la chaîne" - et encore, alors qu'en mode insertion vous utiliseriez les flèches pour y arriver, en mode normal, vous pourriez le faire /want et appuyez sur Entrée pour atterrir sur le mot «vouloir», puis faites ci". - Nathan Long
Hé c'est chouette! Quel moyen rapide de déplacer le curseur. La seule façon de l'améliorer serait de faire apparaître comme par magie l'endroit où vous souhaitez placer le curseur, et de le faire simplement sauter. Peut-être pouvons-nous inventer quelque chose. Je pense que nous devrions l'appeler une "souris". - Matthew Scouten
@MatthewScouten Personne ne prétend que vim est plus simple qu'une souris. Avec un peu de pratique cependant, c'est beaucoup, beaucoup plus rapide. Utiliser une souris, c'est comme pointer et grogner pour faire passer votre message. Vim vous permet de parler en phrases complètes. - Dean
Briser les habitudes est une bonne réponse - mais empêcher de force une activité normale est fasciste. Pire, le la facilité d'utilisation de (hjkl): cartographie up et down à 2 touches qui sont indiscernables verticalement les unes des autres, sans parler des touches gauche et droite ..... tragique démonstration de l'arrogance aveuglée idéologiquement. - New Alexandria


Placement de clé

En bref, Vim utilise le hjkl L’interface de navigation utilise les touches car c’est un vestige de l’ancien terminal "ADM-3A" sur lequel ces touches étaient marquées par des flèches.

Keyboard

Depuis vim dérive de vi, il utilise les mêmes clés hjkl.

Nouvelles habitudes

Le remplacement par lettre des touches fléchées vous permet de naviguer dans le texte sans prendre les mains de la configuration de frappe standard. C'est sans doute plus efficace et plus rapide que de déplacer votre main pour frapper les touches fléchées. Comme indiqué dans la référence n ° 2 (voir ressources), ce n’est pas la fin des avantages: VIM a beaucoup d’autres raccourcis auxquels vous pouvez accéder sans bouger les mains.

Ressources et mode d'insertion

Il y a quelques réponses très détaillées et précises aux deux parties de votre question: en termes de remplacement des touches fléchées, j'ai répondu de manière rapide et sommaire. pour votre question d'insertion, s'il vous plaît voir les ressources énumérées ci-dessous.


90



Sans compter que les touches hjkl sont beaucoup plus efficaces que de déplacer vos mains vers les touches fléchées. - sixtyfootersdude
Cela ne répond pas à la question, explique seulement pourquoi hjkl est choisi. - Matsemann
C'est une histoire vraie et intéressante, mais l'OP demande comment vous déplacez le curseur en mode insertion. hjkl ne fonctionne pas en mode insertion, alors comment est-ce une réponse à la question? - LarsH
@Kruug, la première partie de la question est pourquoi quelqu'un a dit de ne jamais utiliser les touches fléchées dans vim. Le fait que vous puissiez utiliser hjkl in vim ne dit pas pourquoi quelqu'un ne devrait jamais utiliser les touches fléchées, tout comme le fait que je puisse faire du vélo pour aller au travail n'explique pas pourquoi quelqu'un me dirait de ne jamais courir. - LarsH
Maintenant, je comprends pourquoi Vim utilise escape pour sortir du mode insertion ^^ Photo cool! - Étienne


Ce mantra stupide est souvent répété par les dactylographes pour qui la rangée à la maison est comme une seconde colonne vertébrale ou par une personne qui ne frappe pas et qui veut avoir l'air cool. Pour les non-dactylographes, la rangée de départ n'est tout simplement pas si spéciale et bouger légèrement la main droite pour atteindre les flèches n'est pas un problème du tout.

Ce qu'il est important de considérer, c'est ce que les personnes qui répètent ce mantra proposent d'utiliser à la place.

La plupart du temps, ils insistent pour utiliser hjkl.

Si nous omettons le fait que ces touches ne sont utilisées que parce que le clavier utilisé par l'auteur de vi n'a pas de touches fléchées physiques et que tout argument contre les touches fléchées est juste une rationalisation, hjkl ne sont que légèrement mieux que les flèches de toute façon. Oui, le seul avantage d'utiliser hjkl au-dessus des flèches, vous passez ce petit mouvement de la main droite vers les flèches. Que cet avantage vaille la peine est votre appel.

Mais ce mouvement de la main droite n’est pas pourquoi utiliser seulement les flèches sont inefficaces. Il est inefficace car ils vous empêchent de déplacer caractère par caractère et ligne par ligne tout en plus La quantité de mouvement nécessaire à la modification du texte est beaucoup plus étendue.

Marteler la flèche droite 13 fois est inefficace et ennuyeux. Est-ce cette mieux de marteler le l clé 13 fois? Non, c'est aussi stupide.

Garder la flèche droite enfoncée jusqu'à ce que vous atteigniez votre cible est moins ennuyeux mais il est sujet aux erreurs et presque aussi inefficace que 13 coups à cause du ralentissement nécessaire et non déterministe à la fin. Est-ce cette mieux garder la l touche enfoncée? Non bien sûr que non.

Heureusement, la plupart des boîtes à outils d'interface graphique fournissent des combinaisons comme Ctrl+Right cela nous permet de passer mot par mot ou de passer directement à EOL, au paragraphe suivant ou autre. Ces raccourcis nous aident à naviguer beaucoup plus rapidement et intelligemment qu'avec les flèches simples. Avons-nous la même chose avec hjkl? Non, nous ne le faisons pas. Nous pouvons utiliser un compte, si nous voulons, mais qui veut compter les caractères pour chaque mouvement? Faire 14k avec l'aide de relativenumber est génial 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 grands 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/?*#{}() etc. Ces commandes sont incommensurablement plus puissant que hjkl et pour la plupart beaucoup plus logique et intuitive si vous êtes habitué à Ctrl+Right et amis.

Changer de <Right><Right><Right><Right><Right><Right><Right><Right><Right> à lllllllll ou même 9l est ridiculement inutile.

Changer de <Right><Right><Right><Right><Right><Right><Right><Right><Right> à <C-Right> est beaucoup mieux. De là, passer à w est à la fois facile 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 de commentateurs insistent-ils pour remplacer les flèches par hjkl?

J'ai. Aucune idée.

En conclusion, hjkl ont leur place dans notre trousse à outils car nous devons toujours nous déplacer de 2 caractères ou de lignes, mais ils sont le plus souvent l’arbre qui cache la forêt. Méfiez-vous des gens qui prêchent contre les flèches: ce qui vous attend peut ne pas être mieux du tout.


50



Au début, je pensais que vous alliez dire que «hjkl» est inutile, mais que les bons mouvements, les mouvements de mots / paragraphes / phrases sont beaucoup plus utiles que le mantra concernant le mouvement à un seul caractère. - Xavier T.
Merci. L'autre jour, j'ai eu une discussion similaire sur HN qui a déraillé en raison de la mauvaise formulation. Focaliser ses efforts sur hjkl  est inutile mais hjkl sont utiles. - romainl
Même chose ici: à la fin, j'ai bien aimé votre réponse, mais je pense que le ton est apparu inutilement. - UncleZeiv
Ooooh, merci Daniel. - romainl
Ne les appelez pas inutiles, l'argument sur la vitesse est bon, et la façon dont HJKL fonctionne avec d'autres commandes VIM d'une manière qui ne convient pas aux touches fléchées est également importante. - Aviator45003


D'autres ont décrit pourquoi d'autres moyens de déplacer le curseur sont préférables, mais peu de choses ont été faites pour répondre à la question, pourquoi est-ce considéré comme une mauvaise idée d'utiliser les touches fléchées?

Je pense que la principale raison (et @Squeezy y ont fait allusion) est qu’à l’époque des terminaux comme le VT100, les touches fléchées ont produit une séquence d'échappement cela a été interprété par le programme en cours d'exécution. (Puisque les touches fléchées ne sont pas représentées en ASCII, la saisie des touches fléchées doit être communiquée de manière "spéciale".)

ESC [ A

selon les propriétés de votre terminal, votre connexion et votre mode curseur. Si votre shell ou votre programme n'était pas configuré correctement pour le terminal, ils ne comprendraient pas la séquence d'échappement sous la forme d'une touche fléchée.

Lorsque j'étais à l’université, en me connectant à Ultrix via les terminaux VT100, si je appuyais sur une flèche en mode vi en mode insertion, la ESC serait interprété comme "sortir du mode insertion", puis le suivant [ A ont été interprétés comme des commandes en mode normal. Evidemment pas ce que l'utilisateur veut ou attend!

De nos jours, le traitement des terminaux et des touches fléchées semble être plus robuste, en particulier dans les environnements à interface graphique. Mais les mêmes problèmes surviennent quand on utilise vim sur SSH ou Telnet.


16





L'utilisation des touches fléchées est mal vue car cela vous oblige à déplacer vos doigts de la maison lorsque vous utilisez la disposition QWERTY et du pavé de caractères (?) Lorsque vous utilisez Dvorak ou n'importe quelle autre disposition.


14



Sensationnel. Sérieusement? Je ne veux pas y croire, car cela impliquerait que les concepteurs de Vim penseraient que leurs utilisateurs passent plus de temps à taper qu'à penser. - Renan
Pourquoi vous déplacer à la main implique-t-il de penser? - EBGreen
bien, quand je devais le faire à l’école, tu devais frapper esc avant de pouvoir utiliser la navigation hjkl, donc tu avais déjà retiré ta main gauche de la rangée pour que ton petit doigt devienne Esc. Je me souviens que pour revenir en arrière et insérer un caractère, il fallait entrer «Esc: h i», puis taper le caractère à insérer. Ce n'est pas si utile. - Frank Thomas
@Renan - vous supposez que «taper» signifie «insérer du texte». J'ai les doigts sur la ligne de départ quand je lis et réfléchis, parce que le clavier est ce que je naviguer dans Vim: chercher à déplacer, ouvrir d'autres fichiers pour comparer le code, sauter pour corriger les fautes d'orthographe, etc. - Nathan Long
@Renan - 1) vous sous-estimez les économies et 2) les petites choses s’additionnent. J'ai vu les utilisateurs de Vim power à typage tactile modifier à une vitesse 10 fois supérieure à celle des autres développeurs. À une vitesse suffisante, l'édition devient automatique et n'interrompt pas les pensées ou les flux. C'est un plaisir de travailler de cette façon, alors ça flotte sur mon bateau, mais je parie que c'est un gain de productivité plus important que vous ne le pensez. Essayez de regarder des codeurs comme Gary Bernhardt comme exemple. - Nathan Long


Les touches fléchées présentent 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 comme ESC a. Maintenant, lorsque le temps entre ESC et a devient trop long, vous finissez par entendre un BEL (ou voir un flash) suivi d'un mode d'ajout. Cela n'apparaîtra pas avec le hjkl clés.


10



je pense ESC [ A est ce que vous faites référence? - LarsH
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, le ESCcaractère envoyé dans le cadre de la touche fléchée a été facilement confondu avec le ESC tapé manuellement. - RBerteig
@RBerteig: Bon à savoir. - LarsH


En ce qui concerne la deuxième question:

[I] Si vous n'utilisez pas les touches fléchées, comment déplacer le curseur en mode Insertion?

Pour celui qui est maître et qui méprise donc les touches fléchées, le concept de "mode" n'existe pas non plus.

Le maître ajoute un nouveau texte en utilisant non pas un mode d'insertion, mais plutôt un insert ou un remplacement complet commandes qui commence par un opcode tel que i, o ou cw qui est suivi par le texte de charge utile, et terminé par ESC. Les commandes ont une syntaxe, et donc la machine traverse des états en acceptant la syntaxe des commandes, mais dans le modèle de maître de l'éditeur, celles-ci ne donnent pas lieu à un mode. Ce que les apprentis appellent naïvement "mode", c'est au maître un état de commandement inachevé, une situation très aberrante que le maître évite.

Chaque fois que le maître réalise, alors qu’il est au milieu d’une commande insert ou replace, que le texte doit être inséré ou supprimé à la prochaine position de caractère indiquée par le curseur, le maître termine la commande insert et libère une des dizaines de commandes de mouvement (recours à l'humble hjkl si une manière plus puissante n'est évidemment pas applicable).

De plus, comme le maître est rarement distrait de manière à laisser une commande inachevée, le maître fait rarement, voire jamais, retentir l’éditeur à cause de la ESC émis "juste au cas où".

(Cependant, lorsque le réseau est en retard ou que la machine s’embourbe, le ESC touche furieusement et à plusieurs reprises, comme tout le monde.)


5



Rappelez-vous si viL'entrée de commande d'insertion est un mode, alors pour être juste, nous devons identifier tous ces modes dans d'autres éditeurs et les appeler modaux. Par exemple, lorsque nous frappons 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". - Kaz