Pourquoi ^M
est-il utilisé pour représenter un retour chariot dans VIM et d'autres contextes?
Mon hypothèse est que M
est la 13ème lettre de l'alphabet latin et qu'un retour à la ligne est \x0D
ou décimal 13
. Est-ce la raison? Cette représentation est-elle documentée quelque part?
Je remarque que Tab est représenté par ^I
, qui est la neuvième lettre de l'alphabet latin. Inversement, Tab est \x09
ou décimal 9
, ce qui confirme ma théorie énoncée ci-dessus. Cependant, où cela pourrait-il être documenté comme un fait?
Je crois que ce que l’OP demandait réellement s’appelle Caret Notation .
La notation Caret est une notation pour les caractères de contrôle non imprimables en codage ASCII. La notation consiste en un signe (^) suivi d'une lettre majuscule; Ce digraphe représente le code ASCII dont la valeur numérique est équivalente à la valeur numérique de la lettre. Par exemple, le caractère EOT avec une valeur de 4 est représenté par ^ D car D est la 4ème lettre de l'alphabet. Le caractère NUL avec la valeur 0 est représenté par ^ @ (@ est le caractère ASCII avant A). Le caractère DEL avec la valeur 127 est généralement représenté par ^?, Car le ASCII '?' est avant '@' et -1 est égal à 127 s'il est masqué sur 7 bits. Une autre formulation de la traduction est que le caractère imprimé est trouvé en inversant le septième bit du code ASCII.
La liste complète des ASCII caractères de contrôle ainsi que la notation du curseur peuvent être trouvés ici
En ce qui concerne vim et les autres éditeurs de texte: vous ne verrez généralement ^ M que si vous ouvrez un fichier texte au format Windows (CRLF) dans un éditeur qui attend des fins de ligne Linux. Le 0x0A est rendu sous la forme d'un saut de ligne, le 0x0D juste avant d'être imprimé en tant que ^ M. La plupart du temps, les paramètres par défaut de l'éditeur incluent "reconnaître automatiquement les fins de ligne".
C'est exactement la raison.
ASCII définit les caractères 0 à 31 comme des codes de contrôle non imprimables. Voici un extrait de la page de manuel ascii(7)
d’un système Linux aléatoire (man ascii
), jusqu’à CR (13):
Oct Dec Hex Char
─────────────────────────────────────────────
000 0 00 NUL '\0'
001 1 01 SOH (start of heading)
002 2 02 STX (start of text)
003 3 03 ETX (end of text)
004 4 04 EOT (end of transmission)
005 5 05 ENQ (enquiry)
006 6 06 ACK (acknowledge)
007 7 07 BEL '\a' (bell)
010 8 08 BS '\b' (backspace)
011 9 09 HT '\t' (horizontal tab)
012 10 0A LF '\n' (new line)
013 11 0B VT '\v' (vertical tab)
014 12 0C FF '\f' (form feed)
015 13 0D CR '\r' (carriage ret)
Conventionnellement, ces caractères sont générés avec Control et la lettre relative au personnage requis. Les claviers et les premiers claviers de terminaux avaient "Bell" écrits au-dessus G clé pour cette raison.
Le document de normes définissant ASCII est ASA X3.4-1963 , publié par l'American Standards Association en 1963. I ne peut pas trouver le document original sur leur site web, mais cet extrait du document original montre le tableau de caractères, y compris les codes de contrôle ci-dessus.
La notation remonte aux premiers ASCII télétypes (vers 1963). Une clé CTRL activait le bit 0x40 pour que CTRL-M (retour chariot) soit 0D au lieu de 4D, CTRL-G (cloche) soit 07 au lieu de 47, CTRL-L (saut de page) soit 0C de 4C.
Il n’existait pas de "conception" dans l’attribution de lettres particulières à des fonctions particulières. Il était donc fort probable que, lorsque la poussière liée à l’attribution de codes ASCII ait disparu, la touche M différait un peu du retour chariot et que ce retour CTRL-M.
Voici le meilleur cliché que je puisse trouver d'un clavier ASR33. Comme vous pouvez le constater, les noms des caractères de contrôle sont imprimés en petites lettres sur les touches alpha correspondantes.
Image par Marcin Wichary, utilisateur: AlanM1 (dérivé (recadré) à partir de Fichier: ASR-33 2.jpg ) [ CC BY 2.0 ], via Wikimedia Commons
La touche M n'a pas de notation car il y a une touche "RETOUR" dédiée. CTRL-M est donc redondant.
Le signe d'insertion (^) est juste un raccourci pour l'écriture, maintenez la touche Contrôle - CTRL enfoncée.
Au bon vieux temps, vous pouviez taper ces codes (voir ci-dessus) directement, les touches Ctrl + G (^ G) feraient passer le terminal à "Ding"
Lorsque vous voulez ajouter un CR dans Vim, utilisez la touche Ctrl + M, etc. tab = Ctrl + I
La nécessité d'une manière visuelle d'afficher ce qui sont par définition des caractères non imprimables.
Ainsi, au début des années 1970 (ou peut-être plus tôt) (je me souviens de l'avoir vu sur CP/M, et quelqu'un d'autre a déjà mentionné TOPS), il a décidé que "lettre plus le curseur" serait le symbole des 26 caractères non imprimables ASCII caractères de contrôle avec les valeurs 1 à 26. La valeur 0 est/a été imprimée sous la forme ^ @ et la valeur 127 sous la forme ^ ?.
Où est-il documenté, ainsi cette page liste tous les caractères de contrôle, avec la façon de les entrer/représenter avec la clé de contrôle (bien que le premier, le caractère ascii 0, n’a pas de représentation de clé de contrôle), et il n’a rien pour le caractère 127. Et il fournit des sources en bas
https://www.cs.tut.fi/~jkorpela/chars/c0.html
On peut s’interroger, étant donné qu’il existe 33 caractères de contrôle (caractères ASCII 0-31 donc 32 caractères, + caractère 127. Donc, = 33 caractères). Comment ils seraient tous représentés car il n’ya que 26 lettres dans l’alphabet. Eh bien, il utilise Ctrl-A pour le caractère Ascii 1, Ctrl-Z pour le caractère ascii 26, et une fois qu’il atteint Ctrl-Z, il utilise [
\
]
^
_
Il répertorie Ctrl-Z en tant que SUB, bien que sous DOS et l'invite cmd soit EOF, et en tant qu'utilisateur technique, vous l'utilisez lorsque vous faites copy con a.a
, où a.a
est votre fichier. Vous entrez le texte et le terminez avec Ctrl-Z qui, curieusement, n'entre pas de marqueur EOF. Mais ne dit pas à CMD que c'est la fin du fichier, donc CMD l'écrit.
Cette page Web cs.tut.fi donne ceci comme source
http://www.wps.com/texts/codes/X3.4-1963/index.html
mais c'est un lien brisé, mais disponible sur archive.org c'est sous forme de JPG
Code américain normalisé pour l'échange d'information
Norme ASA X3.4-1963
https://web.archive.org/web/20010430085116/http://www.wps.com/texts/codes/X3.4-1963/index.html