Warum werden Sonderzeichen wie "Wagenrücklauf" als "^ M" dargestellt?

93

Warum wird ^Mein Wagenrücklauf in VIM und anderen Kontexten dargestellt?

Ich vermute, dass dies Mder 13. Buchstabe des lateinischen Alphabets ist und ein Wagenrücklauf \x0Doder eine Dezimalzahl ist 13. Ist das der Grund? Ist diese Darstellung irgendwo dokumentiert?

Ich stelle fest, dass Tab durch dargestellt wird ^I. Dies ist der neunte Buchstabe des lateinischen Alphabets. Umgekehrt ist Tab \x09oder Dezimal 9, was meine oben angegebene Theorie unterstützt. Wo könnte dies jedoch als Tatsache dokumentiert werden?

dotancohen
quelle
1
Denken Sie auch daran, dass DOS / Windows "0x0d 0x0a" verwendet, das auch als "CR LF" bezeichnet wird. Aber Unix / Linux verwenden nur "0x0a" oder "LF". Wenn Sie also ein Windows-Dokument in Linux öffnen, erkennt es zusätzliches "CR", und wenn Sie ein Linux-Dokument in Windows öffnen, erkennt es keine neuen Zeilen.
LatinSuD
3
Die @LatinSuD-Caret-Notation (und die entsprechende Verwendung der Strg-Taste) bezieht sich direkt auf den C0-Steuerungssatz (historisch Teil von ASCII) und nicht darauf, ob und wie ein bestimmtes Betriebssystem oder Programm einen Teil dieses Satzes für die Darstellung neuer Zeilen verwendet sonst. Ebenso ist es unabhängig von der Caret-Notation , ob ^Hein Zeichen gelöscht oder ein Überdrucken zugelassen wird (z. B. n^H~als veraltete Methode zur Erstellung von ñ) oder ob das Steuerzeichen tatsächlich anderweitig verwendet wird.
Jon Hanna
11
Alter ... Ich kann mich nicht an den Originalcode erinnern, aber Strg-G klingelt!
Brian Drummond
3
@OlivierDulac nein, das ^ M ist genau ein Wagenrücklauf, genau wie ^ J ein Zeilenvorschub. Verschiedene Betriebssysteme hatten zwar unterschiedliche Ansichten darüber, ob Zeilenvorschub und / oder Wagenrücklauf oder etwas anderes (wie das von einigen IBM-Zeichen verwendete Newline-Zeichen, das jedoch nicht Teil von ASCII und damit nicht Teil des historischen Erbes einiger anderer Betriebssysteme ist) Stellen Sie eine neue Zeile in einer Textdatei dar. Während einige Programme diese auf unterschiedliche Weise überschrieben haben, ist U + 000D selbst immer noch ein Zeilenumbruch, unabhängig davon, welche späteren Betriebssysteme wie Unix oder DOS sich dafür entschieden haben. (Natürlich
Jon Hanna
1
@OlivierDulac ... U + 000D ist proleptisch, da dieser Name in den 1990er-Jahren mit Unicode eingeführt wurde. Dies bezieht sich jedoch definitiv auf den Code, wie er 1963 in ASCII und 1901 in Murrays modifiziertem Baudot-Code existierte Murray löste Probleme im Zusammenhang mit dem Verschieben von Papier mit den gleichen Werkzeugen, die viele Jahrzehnte später im Konzept der "Textdatei" verwendet wurden. Hämmere eine Schraube in so etwas wie einen Nagel und es ist immer noch eine Schraube. Verwenden Sie LF und / oder CR, um das Ende einer Zeile in einer Textdatei darzustellen. Dabei handelt es sich weiterhin um Zeilenvorschübe und Zeilenumbrüche.
Jon Hanna

Antworten:

115

Ich glaube, dass das, worüber OP tatsächlich gefragt hat, Caret-Notation heißt .

Die Caret-Notation ist eine Notation für nicht druckbare Steuerzeichen in ASCII-Codierung. Die Notation besteht aus einem Caret (^) gefolgt von einem Großbuchstaben; Dieser Digraph steht für den ASCII-Code, dessen numerischer Wert dem numerischen Wert des Buchstabens entspricht. Beispielsweise wird das EOT-Zeichen mit dem Wert 4 als ^ D dargestellt, da D der vierte Buchstabe im Alphabet ist. Das NUL-Zeichen mit dem Wert 0 wird als ^ @ dargestellt (@ ist das ASCII-Zeichen vor A). Das DEL-Zeichen mit dem Wert 127 wird normalerweise als ^? Dargestellt, da das ASCII-Zeichen '?' steht vor '@' und -1 ist das Gleiche wie 127, wenn auf 7 Bits maskiert. Eine alternative Formulierung der Übersetzung besteht darin, dass das gedruckte Zeichen durch Invertieren des 7. Bits des ASCII-Codes gefunden wird

Die vollständige Liste der ASCII-Steuerzeichen zusammen mit der Caret-Notation finden Sie hier

In Bezug auf vim und andere Texteditoren: Normalerweise wird ^ M nur angezeigt, wenn Sie eine Windows-formatierte Textdatei (CRLF) in einem Editor öffnen, der Linux-Zeilenenden (LF) erwartet. Das 0x0A wird als Zeilenumbruch gerendert, das 0x0D unmittelbar bevor es als ^ M ausgegeben wird. Zu den Standardeinstellungen des Editors gehört in der Regel "Zeilenenden automatisch erkennen".

Art Gertner
quelle
1
Ich habe mich immer gefragt, wie das Ding heißt ...
smci
5
Diese Konvention geht zumindest auf die 1970er Jahre zurück; Ich habe es zum ersten Mal auf dem TOPS-10-Betriebssystem gesehen, aber es könnte schon früher existiert haben. Bei älteren ASCII-Terminals war das Zeichen, das jetzt als Caret angezeigt wird, eigentlich ein nach oben gerichteter Pfeil, weshalb dies als "Uparrow-Notation" entstand.
Keshlam
15
Dies ist explizit in das ASCII-Design integriert, sodass die Strg-Taste nur Bit 7 umschaltet.
OrangeDog
2
Es wird nicht nur mit Buchstaben verwendet. Ich würde es nicht als Steuerzeichen mit "dem numerischen Wert des Buchstabens" definieren, sondern als "xor 64". Mit anderen Worten ^Aist 0x41 xor 0x40oder 0x01und ^?ist 0x3F xor 0x40oder 0x7F.
R ..
1
Ascii DEL (^?) Hat nichts mit der Löschtaste zu tun. Dies ist der Standardcode, der vom <---Schlüssel (verwirrenderweise auch als Rücktaste bezeichnet) auf VT100-ähnlichen Terminals generiert wird .
R ..
22

Das ist genau der Grund.

ASCII definiert die Zeichen 0-31 als nicht druckbare Steuercodes. Hier ist ein Auszug aus der ascii(7)Handbuchseite eines zufälligen Linux-Systems ( man ascii) bis einschließlich 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)    

Herkömmlicherweise werden diese Zeichen mit Controldem Buchstaben erzeugt, der sich auf das erforderliche Zeichen bezieht. Teletypen und frühe Terminaltastaturen hatten Gaus diesem Grund "BELL" über der Taste geschrieben .

Das Standarddokument, das ASCII definiert, ist ASA X3.4-1963 , das 1963 von der American Standards Association veröffentlicht wurde. Ich kann das Originaldokument nicht auf ihrer Website finden, aber dieser Auszug aus dem Originaldokument zeigt die Zeichentabelle, einschließlich die obigen Steuercodes.

Flup
quelle
4
Danke. Obwohl diese Antwort informativ ist, enthält sie keine Antwort auf die Frage.
Dotancohen
1
Die Antwort ist im zweiten Absatz versteckt: ^Msteht für Control-M. Auf dem Terminal würden Sie die Steuertaste zusammen mit der M-Taste drücken, um den ASCII-Kode 0x0D, auch als Wagenrücklauf bezeichnet, zu senden.
Martin Liversage
14

Die Notation geht auf die frühesten ASCII-Teletypen (ca. 1963) zurück. Es gab eine STRG-Taste, die das 0x40-Bit umschaltete, sodass STRG-M (Wagenrücklauf) 0D statt 4D lautete, STRG-G (Glocke) 07 statt 47 lautete und STRG-L (Formularvorschub) 0C lautete von 4C.

Es gab kein "Design" bei der Zuweisung bestimmter Buchstaben zu bestimmten Funktionen, es war nur Zufall, dass, als sich der Staub von der Zuweisung von ASCII-Codes löste, die M-Taste ein Bit vom Wagenrücklauf unterschied und daher aus dem Wagenrücklauf STRG-M wurde.

Hier ist die beste Aufnahme, die ich von einer ASR33-Tastatur finden kann. Wie Sie sehen, werden die Namen der Steuerzeichen in Kleinbuchstaben auf die entsprechenden Buchstaben gedruckt.

Teletype Model 33 ASR mit Lochstreifen / Lesegerät

Bild von Marcin Wichary, Benutzer: AlanM1 (Abgeleitet (beschnitten) aus Datei: ASR-33 2.jpg ) [ CC BY 2.0 ], über Wikimedia Commons

Auf der M-Taste befindet sich keine Notation, da es eine dedizierte "RETURN" -Taste gibt, sodass STRG-M redundant ist.

Daniel R Hicks
quelle
2
In gewissem Maße ist es überraschend, inwieweit wir immer noch an Designentscheidungen gebunden sind, die für heutzutage scheinbare alte Systeme getroffen wurden - ich denke, a) es ist noch nicht so lange her, es ist nur das Tempo des Wandels in der Zwischenzeit Es war erstaunlich, und (b) wenn genügend Designentscheidungen getroffen wurden, werden einige von ihnen (insbesondere diejenigen, die den Menschen nicht genügend Probleme bereiten) noch lange in Erinnerung bleiben, nachdem die Gründe dafür verschwunden sind. Trotzdem ist es ein seltsames Gefühl, auf die Geschichte einiger dieser Dinge zurückzublicken.
Stuart Golodetz
2
@StuartGolodetz - Eigentlich finde ich es seltsam beruhigend. Aber dann erinnere ich mich, als Teletypen "fortschrittliche Technologie" waren. (Der Teletyp ASR-33 war übrigens bemerkenswert für seine elegante Einfachheit. Ich wünschte nur, dass "moderne" Computersysteme so gut gestaltet
Daniel R Hicks
1
Das ist faszinierend, aber was ich nicht verstehe, ist ... warum haben sie ausgerechnet entschieden, dass diese Schreibmaschine eine Klingel benötigt?
CaptainCodeman
4
@CaptainCodeman - Wenn Sie eine wichtige Nachricht gesendet haben, läuten Sie die Glocke, um die Aufmerksamkeit des Bedieners auf das andere Ende zu lenken.
Daniel R Hicks
2
Es ist interessant festzustellen, dass die Strg-Taste auf PC-Tastaturen bis heute überlebt.
Daniel R Hicks
3

Das Caret (^) ist nur eine Abkürzung zum Schreiben. Halten Sie die Strg-Taste gedrückt.

In guten alten Zeiten konnte man diese Codes (siehe oben) direkt eingeben, Strg + G (^ G) würde das Terminal "ding" machen

Wenn Sie in Vim einen CR hinzufügen möchten, verwenden Sie die Tastenkombination Strg + M usw. tab = Strg + I

Don
quelle
Der Begriff, den Sie suchen, ist Digraph , dh zwei Zeichen, die ein Zeichen darstellen. Insbesondere werden Digraphen und Trigraphen verwendet, um nicht druckbare Zeichen darzustellen. In der Vergangenheit wurden sie auch für Zeichen verwendet, die nicht auf einer Tastatur angezeigt werden. Bei modernen GUIs und Tastaturen ist dies jedoch weniger ein Problem, sodass diese Verwendung archaischer ist.
"In den guten alten Tagen" ist noch heute, wobei ^ C und ^ D perfekt funktionieren. Der einzige Grund, warum ^ G das Terminal nicht mehr aktiviert, ist, dass bei den meisten Terminalemulatoren diese Antwort deaktiviert ist.
SevenSidedDie
2

Notwendigkeit einer visuellen Darstellung von per Definition nicht druckbaren Zeichen.

Jemand in den frühen 1970ern (oder vielleicht früher) (ich erinnere mich, dass ich es auf CP / M gesehen habe, und jemand anderes hat TOPS bereits erwähnt) hat entschieden, dass "Caret plus Buchstabe" das Symbol für die 26 nicht druckbaren ASCII-Steuerzeichen mit Werten ist 1 bis 26. Der Wert 0 wird / wurde als ^ @ und der Wert 127 als ^? Ausgegeben.

RonJohn
quelle
1

Wo es dokumentiert ist, listet diese Seite alle Steuerzeichen auf und gibt an, wie sie mit der Steuertaste eingegeben / dargestellt werden sollen (obwohl die erste, ASCII-Zeichen 0, keine Steuertastendarstellung hat), und es gibt nichts für Zeichen 127. Und Es bietet Quellen am unteren Rand

https://www.cs.tut.fi/~jkorpela/chars/c0.html

Angesichts der Tatsache, dass es 33 Steuerzeichen gibt (ASCII-Zeichen 0-31, also 32 Zeichen, + Zeichen 127, also 33 Zeichen), könnte man sich fragen, wie sie alle dargestellt würden, da das Alphabet nur 26 Buchstaben enthält. Nun, es verwendet Strg-A für ASCII-Zeichen 1, Strg-Z für ASCII-Zeichen 26 und dort, wenn es Strg-Z erreicht, verwendet es [ \ ] ^ _

Es listet Strg-Z als SUB auf, obwohl es in DOS und der Eingabeaufforderung cmd EOF ist, und als Techie-Benutzer verwenden Sie es, wenn Sie tun, copy con a.awo a.asich Ihre Datei befindet. Du gibst den Text ein und beendest ihn mit Strg-Z, was komischerweise keinen EOF-Marker eingibt. Sagt CMD jedoch, dass dies das Ende der Datei ist, sodass CMD sie schreibt.

Diese cs.tut.fi-Webseite gibt dies als Quelle an:
http://www.wps.com/texts/codes/X3.4-1963/index.html

Aber es ist ein defekter Link, aber auf archive.org verfügbar. Es ist in Form von JPGs

Amerikanischer Standardcode für Informationsaustausch
ASA-Standard X3.4-1963

https://web.archive.org/web/20010430085116/http://www.wps.com/texts/codes/X3.4-1963/index.html

barlop
quelle
Die meisten Steuerzeichen sind bedeutungslos, aber auch einige mit einer Bedeutung wie Strg-I. Ich bin nicht sicher, wo Sie einfach Strg-I ausführen und einen Tabulator abrufen können.
Barlop
1
Keines der Steuerzeichen ist bedeutungslos. Viele von ihnen werden in vielen Zusammenhängen nicht verwendet, aber jeder einzelne hat mindestens eine Bedeutung.
Jon Hanna
@ JonHanna Natürlich meine ich nicht, dass sie bedeutungslos waren (Vergangenheitsform). Aber R.Habe jahrzehntelang bedeutungslos gewesen, dh sie hatten ihre ursprünglichen Bedeutungen von vor Äonen, Tech, die nicht mehr läuft, sind (die meisten Zeichen) heute bedeutungslos w / current und sogar ein bisschen old tech.n wenn irgendwelche für moderne Zwecke verwendet werden, sind es nicht viele. Es gibt eine Liste hier en.wikipedia.org/wiki/Control_character von Einsen im allgemeinen Gebrauch 0,7,8,9,10,11,12,13,127. 9/33 also die anderen (24 von ihnen) wären entweder sehr selten oder gar nicht so tot wie die antiken Maschinen, die jahrzehntelang außer Betrieb waren und auf
denen
Associated Press verwendet weiterhin ANPA-1312, das 1–4, 6 und 16 verwendet, um jede TCP / IP-Verbindung zu starten. Moderne Drucker (unter anderem) verwenden immer noch 17 und 19. Zusammen mit denen, die Sie erwähnen, haben wir einen beträchtlichen Prozentsatz davon abgedeckt, ohne es wirklich zu versuchen. Ich gebe dir zu, dass sie nicht stark genutzt werden, aber sie sind auch nicht tot.
Jon Hanna
1
@barlop Sie können ^Ifür einen Tab in der Standard-Bash tun : Geben Sie ein ls ~/^I^Iund Sie sollten alle Ordner in Ihrem Home-Verzeichnis sehen.
wchargin
0

ControlIn dieser Tabelle sehen Sie alle nichtpritablen ASCII-Zeichen, die zugeordnet sind .

Ofir Luzon
quelle
5
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Sollte sich die verlinkte Seite einmal ändern oder aus irgendeinem Grund ungültig werden, ist die Antwort für die Besucher des Super User weiterhin nützlich.
CVn
3
Danke. Obwohl diese Antwort informativ ist, enthält sie keine Antwort auf die Frage.
Dotancohen