Warum wird im Terminal ^ C, ^ V usw. angezeigt, wenn ich die Tastenkombination Strg + Zeichen verwende?

26

Manchmal, wenn ich Text aus der Ausgabe von Befehlen kopiere, verwende ich versehentlich Ctrl+ canstelle von Ctrl+ Shift+ c.

Die Kommandozeile interpretiert es also als ^C...

Warum ist das? Warum interpretiert die Befehlszeile die controlEingabe als ^?

Sag mir warum
quelle

Antworten:

35

Die Zeichenfolge "^ C" wird nicht tatsächlich eingefügt. Dies ist nur eine Darstellung für nicht druckbare ASCII-Steuerzeichen, wie z.

  • ^C → ETX (Textende, sendet ein Kill-Signal), ASCII 0x03
  • ^D → EOT (Ende der Übertragung, Eingabe beenden), ASCII 0x04
  • ^H→ BS (Rücktaste, \b), ASCII 0x08
  • ^J→ LF (Zeilenvorschub \n), ASCII 0x0A
  • ^L → FF (Formularvorschub, neue Seite, löscht das Terminal), ASCII 0x0C
  • ^M→ CR (Wagenrücklauf, \r), ASCII 0x0D

Dies ist nur ein kleiner Auszug möglicher ASCII-Steuerzeichen, die über die Tastatur eingegeben werden können. Eine vollständige Liste finden Sie hier .

Ich denke, die wichtigsten, an die man sich erinnern sollte, sind Ctrl+ C, Ctrl+ Dund Ctrl+ L.

s3lph
quelle
Die Verwendung des Einfügemarke ^als Symbol für "Kontrolle" geht auf vorgrafische Zeiten zurück, als die Terminals nur aus Text bestanden, und ich glaube, dass es noch vor unserer Zeit, als wir Karten und Papier hatten, keine Terminals gab. Ich würde gerne wissen, warum das Caret als Symbol gewählt wurde.
Paddy Landau
8

Da CTRL+ KEYCombos vom Terminal als nicht druckbare ASCII-Zeichen interpretiert werden und diese nicht druckbar sind, müssen Sie sie darstellen.

Die Konvention, die von VT-Terminals mit ANSI-Unterstützung ausgeht , ist die Darstellung der CTRL+ KEY-Kombination CTRLmit einem Caret ( ^) und KEYmit KEY.

kos
quelle
5

Beim Kopieren und Einfügen in / aus einem Terminal wird empfohlen, die Tastenkombinationen Ctrl+ Insertund Shift+ zu Insertverwenden.

Dies sind die traditionelleren Abkürzungen für die Terminalverwendung, obwohl Sie feststellen werden, dass in einer grafischen X-Umgebung Ctrl+ Insertund Shift+ Insertmit denselben Ctrl+ Cund Ctrl+ verknüpft sind V.

In den meisten Terminals wird Ctrl+ C(dargestellt durch ^C) verwendet, um die Ausführung eines Prozesses anzuhalten. Daher funktioniert das Einfügen mit dieser Abkürzung nicht.

Zum schnellen Kopieren und Einfügen können Sie den Primärpuffer von X verwenden, indem Sie den zu kopierenden Text markieren und dann mit der mittleren Maustaste auf die Stelle klicken, an der Sie ihn einfügen möchten. Keine Tastatur erforderlich.

Keefer Rourke
quelle
2
Entschuldigung, aber Sie haben die Frage falsch verstanden. OP wollte wissen, warum die Zeichenfolge ^Coder ähnliche Zeichenfolgen angezeigt werden, wenn STRG + C (oder STRG + ein anderer Buchstabe) gedrückt wird. Es geht nicht darum, wie man Dinge im Terminal richtig kopiert und einfügt, für die Ihre Antwort großartig wäre.
Byte Commander
@ByteCommander, richtig, Sie sind! Entschuldigung, ich werde meine Antwort so lassen, wie sie ist, da die Frage anscheinend bereits richtig beantwortet wurde.
Keefer Rourke
-2

Sie sollten mit sein Ctrl+ Cund nicht Shift+ Ctrl+ C, weil auf der Kommandozeile, sie das gleiche tun (und Ctrl+ Cist einfacher als Shift+ Ctrl+ C). In bestimmten grafischen Umgebungen, in denen die grafische Benutzeroberfläche einige Tastenanschläge erfasst und spezielle Aktionen ausführt, trifft dies möglicherweise nicht zu. Wenn die Tastenanschläge jedoch tatsächlich an die Befehlszeile gesendet werden, gibt es keinen Unterschied. Aus diesem Grund wird durch Drücken von Ctrl+ Cmöglicherweise ^ C als Großbuchstabe C anstelle von Kleinbuchstaben C angezeigt. Die Befehlszeile unterscheidet nicht, auf welche Taste Sie gedrückt haben (und Großbuchstaben wurden vermutlich als leichter lesbar eingestuft). Dies gilt für Briefe; für andere Zeichen Shiftkann das einen Effekt haben.)

Drücken von Ctrl- Csendet den ASCII-Code, der 64 unter der Position des Großbuchstabens in der ASCII-Tabelle liegt (und 96 unter der Position des Kleinbuchstabens in der ASCII-Tabelle). Wenn Sie also Ctrl- c(Kleinbuchstaben) drücken, wird der ASCII-Code 3 gesendet (64 weniger als Cder ASCII-Code von 67 in Großbuchstaben ). In vielen Umgebungen können Sie das Tastenfeld gedrückt halten Altund dann drücken 3(und dann die 3Taste loslassen und dann die Taste loslassen Alt), und Sie erhalten möglicherweise den gleichen Effekt.

In Bezug auf ^ C ist ^ nur eine bekannte Abkürzung für die CtrlTaste " ". Ebenso ist M- eine Abkürzung für die AltTaste " ". Äh, ja. M steht für das Wort "Meta", das eingegeben werden kann, indem Altgedrückt gehalten und gedrückt wird, was als nächstes kommt, oder indem manchmal gedrückt Esc(und losgelassen Esc) und dann gedrückt wird, was als nächstes kommt. Der Wikipedia-Artikel über "Steuertaste": "Notation" beschreibt dies als "traditionelle Notation". Dies wird auch als Caret-Notation bezeichnet ( Wikipedia-Artikel zur Caret-Notation , Unix StackExchange: ryvnfs Frage zur Caret-Notation ).

In Bezug auf die letzte Frage "interpretiert" die Befehlsshell nichts, um ein Caret zu sein. Mit anderen Worten, die Shell liest nichts und glaubt, dass es sich um ein Caret handelt. Was passiert, ist, dass die Shell die bekannte Caret-Notation für die Ausgabe verwendet. Als weiteres Beispiel können Sie den bekannten Pager "less" mit der Caret-Notation anzeigen, indem Sie Folgendes ausführen:dd if=/dev/zero bs=64 count=1 | less

(Der Texteditor "nano" verwendet in seiner Online-Hilfe auch die Caret-Notation, einschließlich der vollständigen Bildschirmanzeige der Online-Hilfe, die nach dem Drücken von ^ G (aka Ctrl- g) angezeigt wird .)

TOOGAM
quelle
4
DevRobot fragt speziell nach der Verwendung von Strg-C (oder besser Umschalt-Strg-C) im Kontext des Kopierens und Einfügens, was ein GUI-Terminal impliziert. Sie müssen sich nicht unbedingt irren, aber Ihre Erklärung ist definitiv verwirrend für jemanden, der aus der Perspektive eines GUI-Benutzers kommt.
RM