Zum Inhalt springen

ANSI-Escape-Codes

Ein ANSI-Escape-Code ist eine kurze Zeichenfolge, die ein Programm ausgibt, um dem Terminal etwas anderes anzuweisen, als diese Zeichen anzuzeigen — die nächsten Wörter rot färben, den Cursor um zwei Zeilen nach oben verschieben, den Bildschirm löschen. Das Terminal nimmt die Sequenz auf und führt sie aus, darum sieht eine Protokolldatei voll davon im Editor aus wie Rauschen.

Jeder Code unten beginnt mit dem Escape-Byte und — mit einer Ausnahme — einer öffnenden Klammer. Die Spalte Parameter gibt den Teil zwischen Klammer und Endbuchstabe an, d. h. das, was Sie im Code zusammensetzen; die erste Spalte zeigt die gesamte Sequenz, wie Sie sie in einer Shell schreiben würden.

Die Unterstützung variiert zwischen Terminals, und auf dieser Seite wird angegeben, wo dies wichtig ist. Die acht Grundfarben und fett funktionieren überall; Blinken, Doppelunterstrich und echte Farbe hingegen nicht.

Anatomie einer Sequenz

6

Jeder Code auf dieser Seite hat die gleiche Form: Escape-Byte, öffnende Klammer, Parameter und ein Buchstabe, der sagt, was damit zu tun ist.

SequenzParameterWirkung
\e0x1BDas Escape-Byte, das jede Sequenz startetIn einer Shell geschrieben als \e, in C als \033, in den meisten Sprachen als \x1b und in JSON und Java als \u001b.
\e[CSIControl Sequence Introducer — öffnet einen parametrisierten Befehl
\e[<n>mmSelect Graphic Rendition: Alles zu Farbe und Stil endet mit m
\e[1;4;31m1;4;31Mehrere Parameter auf einmal, durch Semikola getrenntFett, unterstrichen und rot in einer Sequenz — kürzer als drei separate und identisch in der Wirkung.
\e[0m0Setzt alle Attribute auf die Terminal-Vorgabe zurückGeben Sie dies am Ende der farbigen Ausgabe aus. Ein Programm, das beendet wird, ohne es zu geben, hinterlässt der Eingabeaufforderung des Benutzers farbig.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Ein anklickbarer Hyperlink in Terminals, die ihn unterstützenEine OSC-Sequenz statt einer CSI-Sequenz und mit ESC \ beendet statt mit einem Buchstaben.

Textattribute

14

Die Unterstützung ist unter den ersten fünf ungleichmäßig. Blinken wird fast überall ignoriert, und ein paar Terminals rendern dim und kursiv identisch.

SequenzParameterWirkung
\e[1m1Fett oder hell
\e[2m2Gedimmt
\e[3m3Kursiv
\e[4m4Unterstrichen
\e[5m5BlinkenWird weitgehend ignoriert; die meisten modernen Terminals rendern es als Klartext.
\e[7m7Umkehr: tauscht Vordergrund und Hintergrund
\e[8m8Verborgen: der Text ist dort, wird aber nicht gezeichnet
\e[9m9Durchgestrichen
\e[21m21Doppelter UnterstrichEinige Terminals lesen 21 als „fett aus“.
\e[22m22Normale Intensität: hebt fett und gedimmt auf
\e[23m23Hebt kursiv auf
\e[24m24Hebt Unterstrich auf
\e[27m27Hebt Umkehr auf
\e[29m29Hebt Durchstrich auf

Textfarbe

17

Die acht Standardfarben und ihre hellen Gegenstücke. Was der Leser tatsächlich sieht, ist die Interpretation durch sein Terminal-Thema — „rot“ ist ein Platz in einer Palette, kein Hexwert.

SequenzParameterWirkung
\e[30m30Schwarzer Text
\e[31m31Roter Text
\e[32m32Grüner Text
\e[33m33Gelber Text
\e[34m34Blauer Text
\e[35m35Magenta Text
\e[36m36Cyan Text
\e[37m37Weißer Text
\e[39m39Zurück zur Standard-Textfarbe
\e[90m90Helles Schwarzer Text
\e[91m91Helles Roter Text
\e[92m92Helles Grüner Text
\e[93m93Helles Gelber Text
\e[94m94Helles Blauer Text
\e[95m95Helles Magenta Text
\e[96m96Helles Cyan Text
\e[97m97Helles Weißer Text

Hintergrundfarbe

17

Die gleiche Palette um zehn verschoben. Ein Hintergrund-Code färbt die Zelle hinter dem Text und bleibt wirksam, bis er zurückgesetzt wird.

SequenzParameterWirkung
\e[40m40Schwarzer Hintergrund
\e[41m41Roter Hintergrund
\e[42m42Grüner Hintergrund
\e[43m43Gelber Hintergrund
\e[44m44Blauer Hintergrund
\e[45m45Magenta Hintergrund
\e[46m46Cyan Hintergrund
\e[47m47Weißer Hintergrund
\e[49m49Zurück zum Standard-Hintergrund
\e[100m100Helles Schwarzer Hintergrund
\e[101m101Helles Roter Hintergrund
\e[102m102Helles Grüner Hintergrund
\e[103m103Helles Gelber Hintergrund
\e[104m104Helles Blauer Hintergrund
\e[105m105Helles Magenta Hintergrund
\e[106m106Helles Cyan Hintergrund
\e[107m107Helles Weißer Hintergrund

256 Farben und True Color

4

Zwei Erweiterungen des gleichen SGR-Mechanismus. Beide sind weit verbreitet, aber nicht überall unterstützt; ein Terminal, das sie nicht versteht, ignoriert die Sequenz normalerweise, statt sie auszugeben.

SequenzParameterWirkung
\e[38;5;<n>m38;5;nText in Palettenfarbe n, 0–2550–15 sind die 16 oben, 16–231 ein 6×6×6-Farbwürfel, 232–255 eine Graurampe.
\e[48;5;<n>m48;5;nHintergrund in Palettenfarbe n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bText in einer exakten 24-Bit-Farbe
\e[48;2;<r>;<g>;<b>m48;2;r;g;bHintergrund in einer exakten 24-Bit-Farbe

Cursorbewegung

11

Bewegungen scrollen nicht und umbrechen nicht: ein Cursor, der bereits oben auf dem Bildschirm ist, ignoriert eine Anfrage zum Hochfahren.

SequenzParameterWirkung
\e[<n>AAUm n Zeilen nach oben
\e[<n>BBUm n Zeilen nach unten
\e[<n>CCUm n Spalten nach rechts
\e[<n>DDUm n Spalten nach links
\e[<n>EEUm n Zeilen nach unten, zum Zeilenanfang
\e[<n>FFUm n Zeilen nach oben, zum Zeilenanfang
\e[<n>GGZur Spalte n der aktuellen Zeile
\e[<row>;<col>HHZu absoluter Zeile und Spalte, gezählt ab 1
\e[ssDie Cursorposition merken
\e[uuZur gespeicherten Position zurückkehren
\e[6n6nDas Terminal fragen, wo sich der Cursor befindetDas Terminal antwortet auf Standardeingabe als \e[<Zeile>;<Spalte>R — die einzige Sequenz hier, die eine Antwort erzeugt.

Löschen

7

Löschen schreibt Leerzeichen mit der aktuellen Hintergrundfarbe; es bewegt den Cursor nicht.

SequenzParameterWirkung
\e[0J0JLöscht vom Cursor bis zum Ende des Bildschirms
\e[1J1JLöscht vom Anfang des Bildschirms zum Cursor
\e[2J2JLöscht den gesamten BildschirmDer Cursor bleibt dort, wo er war — deshalb wird dies normalerweise mit \e[H kombiniert.
\e[3J3JLöscht auch den Scrollback-Puffer
\e[0K0KLöscht vom Cursor bis zum Ende der Zeile
\e[1K1KLöscht vom Anfang der Zeile zum Cursor
\e[2K2KLöscht die gesamte Zeile\r\e[2K ist die übliche Methode, eine Fortschrittszeile an Ort und Stelle neu zu zeichnen.

Terminalmodi

8

Private Modi, gekennzeichnet durch ein Fragezeichen. Sie ändern das Verhalten des Terminals, nicht das Aussehen eines Textteils, und jeder muss vor dem Beenden des Programms ausgeschaltet werden.

SequenzParameterWirkung
\e[?25l?25lDen Cursor ausblenden
\e[?25h?25hDen Cursor anzeigen
\e[?1049h?1049hZum alternativen Bildschirm wechselnWas ein Vollbildprogramm verwendet, damit die Scrolling-Historie der Shell darunter erhalten bleibt.
\e[?1049l?1049lZurück zum Hauptbildschirm wechseln
\e[?7h?7hLange Zeilen am rechten Rand umbrechen
\e[?7l?7lLange Zeilen über den rechten Rand hinaus laufen lassen
\e[?2004h?2004hEingefügtes Text-Bracketing aktivierenEingefügter Text kommt mit \e[200~ und \e[201~ umhüllt an, damit eine Shell Eingabe von Einfügung unterscheiden kann.
\e[?2004l?2004lEingefügtes Text-Bracketing deaktivieren

Häufige Fragen

Warum bleibt meine Ausgabe nach dem Ende des Programms farbig?
Weil nichts es zurückgesetzt hat. Ein Farbcode bleibt so lange wirksam, bis ein anderer ihn ersetzt, darum ein Programm, das mitten in einer Farbe endet, übergibt der Shell eine farbige Eingabeaufforderung. Geben Sie vor dem Beenden \e[0m aus — auch auf dem Fehlerweg, den die Leute vergessen.
Was ist der Unterschied zwischen \e, \033 und \x1b?
Keiner. Alle drei sind das gleiche Byte, 0x1B, geschrieben wie eine bestimmte Sprache es schreibt: \e in bash und zsh, \033 in C und in echo -e, \x1b in Python, Go, Rust und JavaScript, \u001b wo nur ein Unicode-Escape erlaubt ist, wie in JSON und Java.
Wie entferne ich diese aus einer Protokolldatei?
Fügen Sie sie in den ANSI-Stripper auf dieser Website ein. Er entfernt Farb-, Cursor- und Modussequenzen und kann die Farben auch statt sie zu verwerfen in HTML oder Markdown umwandeln, was Sie tun möchten, wenn der Zweck des Protokolls die Hervorhebung war.
Sollte ich Farben hardcodieren oder eine Bibliothek verwenden?
Bei mehr als ein paar Zeilen verwenden Sie eine Bibliothek — sie prüft, ob die Ausgabe überhaupt ein Terminal ist. Farbcodes in eine Pipe oder Datei geschrieben landen in der Datei, und so erhalten Build-Protokolle ihr Rauschen.
Ist fett dasselbe wie hell?
Historisch ja, und auf manchen Terminals noch immer. Code 1 war als fett definiert, aber viele Terminals setzten es durch Umschalten auf die helle Palettenhälfte um, darum können fett-rot und hell-rot identisch aussehen. Der Bereich 90–97 existiert damit Sie hell anfordern können ohne fett anzufordern.