ainsi que le début d'errance de la touche Échapp grrr
Alors oui, la touche Échap sur le pavé numérique ça va être difficile d’utiliser vim...
Mais en parlant de vim, justement, j’ai lu plusieurs fois que vim a été conçu pour des claviers où la touche Échap était à la place de la touche tabulation actuelle, ce qui était donc plus accessible (Il n’y a pas à déplacer les mains pour faire Échap+R ou Échap+I). On peut voir cette disposition dans la première photo que tu as posté, avec d’ailleurs les flèches sur h, j, k, l. Il n’y a donc pas de touche flèche dédiée. =)
On remarque aussi qu’il y a une touche Return et une touche Line Feed, c’est à dire que CR (\r) et LF (\n) sont des touches différentes. Et l’on constate aussi que la touche Return est bien plus grosse et accessible que Line Feed, c’est à dire qu’il est plus facile de saisir \r que \n.
Ça explique peut-être une vieux mystère de vim: bien que le format UNIX de fin de ligne soit \n (et DOS \r\n), le format interne de fin de ligne de vim semble être \r...
En pratique si vous souhaitez remplacer tous les caractères espace par des sauts de ligne dans un fichier au format UNIX avec sed, vous utiliserez l’expression rationnelle suivante : s/ /\n, mais dans vim, pour remplacer tous les caractères espace par des sauts de ligne dans un fichier au format UNIX, il faut utiliser l’expression rationnelle suivante : s/ /\r/. Si vous utilisez \n dans votre expression rationnelle, vous n’insérerez pas des sauts de ligne, même si votre fichier est au format UNIX...
Si vi était historiquement prévu pour une plateforme utilisant un tel clavier, il ne serait donc pas étonnant que son format interne de fin de ligne soit Return, et donc \r.
Historiquement la commande Carriage Return renvoie le curseur au début de la ligne courante, et la commande Line Feed avance à la ligne suivante. Sur une machine mécanique, faire CR avant LF ou LF avant CR produit le même résultat, mais si on numérise ces commandes dans des fichiers, l’ordre produit des fichiers différents. Et quand il fut jugé bon de fusionner CR et LF en une seule commande, certains ont choisi CR (\r), d’autres comme UNIX ont choisi LF (n), et d’autres encore sont resté à CRLF comme DOS/Windows jusqu’à des versions très récentes de Windows 10.
Mais vu que vi été développé avec un terminal ADM-3A, c’est probablement pourquoi la touche Enter code la même chose que \r même si Unix attend \n, c’est plus visible avec un dessin:
Bref quand on utilise vim, on est conditionné par le fait que l’auteur de vi avait ce matériel très spécifique que personne n’utilise, c’est dire : l’ergonomie de ce matériel n’était déjà pas adapté pour Unix, et vi a été conçu pour l’ergonomie de ce clavier, pas l’ergonomie d’un clavier adapté pour Unix.
Parfois c’est pas si mal, la page Wikipédia dit:
Joy explained that the terse, single character commands and the ability to type ahead of the display were a result of the slow 300 baud modem he used when developing the software and that he wanted to be productive when the screen was painting slower than he could think.
Joy a expliqué que les commandes laconiques à un seul caractère et la possibilité de taper en avance de l’affichage étaient le résultat du modem lent de 300 bauds qu'il utilisait lors du développement du logiciel et qu'il voulait être productif lorsque l'écran se dessinait plus lentement qu’il ne pouvait penser.
C’est ce qui fait que pour supprimer plusieurs lignes une par une, il est plus rapide de tapper dd (supprimer la ligne courante) puis . (répéter la précédente action) que maintenir d enfoncé, car pour chaque ligne suivante, un seule caractère est envoyé au lieu de deux, donc on va deux fois plus vite. Et même aujourd’hui à travers un SSH, la différence est très sensible ! Sans compter évidemment la possibilité de faire 5dd pour supprimer 5 lignes d’un coup en trois caractères seulement, ou 1000dd pour supprimer 1000 lignes en 6 caractères seulement... Parfois je combine les deux : 2dd puis . pour supprimer un nombre indéterminé de lignes deux par deux : ça me permet de supprimer très rapidement un très grand nombre de lignes en me laissant le temps de voir arriver l’endroit où je veux arrêter de supprimer (au pire, j’annule les suppressions récentes). Utiliser :n,Nd pour supprimer de la ligne n à la ligne N est pratique mais ça m’obligerait à utiliser ma mémoire. =)
Quelqu’un saurait m’expliquer s’il y a une différence entre 5dd et d5d? %)
ce commentaire est sous licence cc by 4 et précédentes
[^] # Re: Clavier informatique
Posté par Thomas Debesse (site web personnel, Mastodon) . En réponse au journal Des concepteurs qui ont éteint trop tôt leur cerveau. Évalué à 7.
Alors oui, la touche Échap sur le pavé numérique ça va être difficile d’utiliser vim...
Mais en parlant de vim, justement, j’ai lu plusieurs fois que vim a été conçu pour des claviers où la touche Échap était à la place de la touche tabulation actuelle, ce qui était donc plus accessible (Il n’y a pas à déplacer les mains pour faire Échap+R ou Échap+I). On peut voir cette disposition dans la première photo que tu as posté, avec d’ailleurs les flèches sur h, j, k, l. Il n’y a donc pas de touche flèche dédiée. =)
On remarque aussi qu’il y a une touche Return et une touche Line Feed, c’est à dire que CR (
\r) et LF (\n) sont des touches différentes. Et l’on constate aussi que la touche Return est bien plus grosse et accessible que Line Feed, c’est à dire qu’il est plus facile de saisir\rque\n.Ça explique peut-être une vieux mystère de vim: bien que le format UNIX de fin de ligne soit
\n(et DOS\r\n), le format interne de fin de ligne de vim semble être\r...En pratique si vous souhaitez remplacer tous les caractères espace par des sauts de ligne dans un fichier au format UNIX avec sed, vous utiliserez l’expression rationnelle suivante :
s/ /\n, mais dans vim, pour remplacer tous les caractères espace par des sauts de ligne dans un fichier au format UNIX, il faut utiliser l’expression rationnelle suivante :s/ /\r/. Si vous utilisez\ndans votre expression rationnelle, vous n’insérerez pas des sauts de ligne, même si votre fichier est au format UNIX...Si vi était historiquement prévu pour une plateforme utilisant un tel clavier, il ne serait donc pas étonnant que son format interne de fin de ligne soit Return, et donc
\r.Historiquement la commande Carriage Return renvoie le curseur au début de la ligne courante, et la commande Line Feed avance à la ligne suivante. Sur une machine mécanique, faire CR avant LF ou LF avant CR produit le même résultat, mais si on numérise ces commandes dans des fichiers, l’ordre produit des fichiers différents. Et quand il fut jugé bon de fusionner CR et LF en une seule commande, certains ont choisi CR (
\r), d’autres comme UNIX ont choisi LF (n), et d’autres encore sont resté à CRLF comme DOS/Windows jusqu’à des versions très récentes de Windows 10.Mais vu que vi été développé avec un terminal ADM-3A, c’est probablement pourquoi la touche Enter code la même chose que
\rmême si Unix attend\n, c’est plus visible avec un dessin:ADM-3A keyboard layout
Bref quand on utilise vim, on est conditionné par le fait que l’auteur de vi avait ce matériel très spécifique que personne n’utilise, c’est dire : l’ergonomie de ce matériel n’était déjà pas adapté pour Unix, et vi a été conçu pour l’ergonomie de ce clavier, pas l’ergonomie d’un clavier adapté pour Unix.
Parfois c’est pas si mal, la page Wikipédia dit:
C’est ce qui fait que pour supprimer plusieurs lignes une par une, il est plus rapide de tapper
dd(supprimer la ligne courante) puis.(répéter la précédente action) que maintenirdenfoncé, car pour chaque ligne suivante, un seule caractère est envoyé au lieu de deux, donc on va deux fois plus vite. Et même aujourd’hui à travers un SSH, la différence est très sensible ! Sans compter évidemment la possibilité de faire5ddpour supprimer 5 lignes d’un coup en trois caractères seulement, ou1000ddpour supprimer 1000 lignes en 6 caractères seulement... Parfois je combine les deux :2ddpuis.pour supprimer un nombre indéterminé de lignes deux par deux : ça me permet de supprimer très rapidement un très grand nombre de lignes en me laissant le temps de voir arriver l’endroit où je veux arrêter de supprimer (au pire, j’annule les suppressions récentes). Utiliser:n,Ndpour supprimer de la lignenà la ligneNest pratique mais ça m’obligerait à utiliser ma mémoire. =)Quelqu’un saurait m’expliquer s’il y a une différence entre
5ddetd5d? %)ce commentaire est sous licence cc by 4 et précédentes