Zum Inhalt

Auto-Paarung & intelligente Einrückung

Während Sie tippen, schließt der Editor Klammern und Anführungszeichen für Sie, behält Ihre Einrückung auf neuen Zeilen bei, öffnet Blöcke zwischen geschweiften Klammern und wendet eine konsistente Einrückungseinheit (Tabs oder Leerzeichen) gleichermaßen auf die Tab-Taste, das Ausrücken mit Backspace und die automatische Einrückung an. Alles hier ist eine eingebaute Funktion des Editors; die zugehörigen Menübefehle und die Einstellung des Einrückungsstils stammen aus dem mitgelieferten Einrückungs-Plugin.

Sie soll unsichtbar sein — sie reagiert nur auf das gerade getippte Zeichen und hält sich überall zurück, wo sie stören würde (in Kommentaren und Zeichenketten, vor vorhandenen Wörtern, beim falschen Partnerzeichen).

Auto-Paarung von Klammern und Anführungszeichen

Das Tippen einer öffnenden Klammer oder eines Anführungszeichens fügt den Partner ein und lässt den Cursor zwischen beiden stehen:

Sie tippen Sie erhalten Cursor
( () dazwischen
[ [] dazwischen
{ {} dazwischen
" "" dazwischen
' '' dazwischen

Ein paar Regeln verhindern, dass das lästig wird:

  • Überschreiben (type-over). Das Tippen eines schließenden Zeichens, wenn dasselbe Zeichen bereits rechts vom Cursor steht, springt darüber hinweg, statt ein zweites einzufügen — wer also durch () oder "" hindurchtippt, erhält ein einziges, ausgeglichenes Paar.
  • Keine Paarung vor einem Wort. Ein Öffner wird nur vervollständigt, wenn das nächste Zeichen ein Leerraum, ein Schließer oder das Zeilenende ist — ein ( direkt vor vorhandenem Text schleust also kein verirrtes ) mitten hinein.
  • Apostroph-bewusste Anführungszeichen. Ein ' direkt nach einem Buchstaben (wie in don't) wird als Apostroph behandelt und nicht gepaart. Anführungszeichen paaren sich nur in neutralem Kontext (Token-Anfang, nach Leerraum oder einem Operator).
  • Spitze Klammern nur in Markup. <> paaren sich nur in HTML-/XML-Dokumenten, wo < ein Tag öffnet. Überall sonst ist < ein Vergleichs- oder Shift-Operator und bleibt unangetastet.

Eine Auswahl umschließen (type-to-wrap)

Ist Text ausgewählt, ersetzt ein getippter Öffner die Auswahl nicht — er umschließt sie:

select value  then type (        →   (value)
  • Funktioniert mit ( [ { " ' (nicht mit < — außerhalb von Markup ist es ein Operator).
  • Der innere Text bleibt danach ausgewählt, sodass sich Umschließungen verketten lassen: Tippen Sie ( und dann " und Sie erhalten ("value").
  • Mit mehreren Cursorn wird jede Auswahl unabhängig umschlossen — und die gesamte Operation ist ein Rückgängig-Schritt.

Ein Paar löschen

Ein Backspace mit dem Cursor zwischen einem leeren automatisch eingefügten Paar ((|), [|], {|}, "|", '|' oder <|> in Markup) löscht beide Zeichen in einem Schritt — eine Auto-Paarung lässt sich also mit einem einzigen Tastendruck zurücknehmen. Sobald zwischen dem Paar Inhalt steht, verhält sich Backspace normal.

Intelligente Einrückung bei Enter

Ein Druck auf Enter übernimmt den führenden Leerraum der aktuellen Zeile auf die neue Zeile — Sie bleiben auf derselben Tiefe, ohne Tabs oder Leerzeichen erneut zu tippen:

  • Einrückung beibehalten. Die neue Zeile beginnt mit derselben Einrückung wie die verlassene Zeile.
  • Eine Ebene öffnen. Endet die verlassene Zeile mit einem Öffner ({, [, (), wird die neue Zeile eine zusätzliche Ebene eingerückt.
  • Einen Block öffnen. Steht der Cursor zwischen einem Öffner und seinem passenden Schließer, klappt der Block auf: Die neue Zeile wird eine Ebene tiefer eingerückt, und der Schließer rutscht auf eine eigene Zeile in der Tiefe des Öffners.
if (cond) {|}        Enter        if (cond) {
                     ───────►          |
                                   }

Einrückungsstil — Tabs, Leerzeichen oder Auto

Eine einzige Einrückungseinheit steuert die Tab-Taste, das Ausrücken mit Backspace und die automatische Einrückung oben, sodass sie immer übereinstimmen. Wählen Sie sie unter Einstellungen ▸ Plugins ▸ Einrückung:

Stil Verhalten
Tabs (Standard für neue Dateien) Eine Ebene ist ein echtes Tabulatorzeichen; Leerzeichen pro Einzug legt seine sichtbare Breite fest.
Leerzeichen Eine Ebene besteht aus Leerzeichen pro Einzug Leerzeichen.
Auto (aus dem Dokument erkennen) Der Editor untersucht die vorhandene Einrückung des Dokuments und folgt ihr — eine mit Tabs eingerückte Datei bleibt bei Tabs, eine 2-Leerzeichen-Datei bei zwei Leerzeichen. Eine Datei ohne Einrückung fällt auf den Standard (Tabs) zurück.

Neue, unbenannte Dateien verwenden standardmäßig Tabs mit Breite 4.

Einrückung von Hand anpassen

Das Einrückungs-Plugin fügt zwei Befehle hinzu (auch unter Bearbeiten ▸ Einzug), die jede von der Auswahl berührte Zeile ein- oder ausrücken — bzw. die Zeile des Cursors, wenn nichts ausgewählt ist:

Befehl Tastenkürzel
Einzug vergrößern Ctrl+]
Einzug verkleinern Ctrl+[

Sprachspezifische Standards

Manche Sprachen haben eine nahezu universelle Einrückungskonvention, und der Editor liefert sie als Standard dieser Sprache mit — eine frisch geöffnete Datei dieses Typs rückt ohne jede Konfiguration korrekt ein:

Sprache Standard
Python 4 Leerzeichen (PEP 8)
Rust 4 Leerzeichen (rustfmt)
Markdown 4 Leerzeichen (verschachtelte Listen)
YAML 2 Leerzeichen (Tabs sind nicht erlaubt)
JSON 2 Leerzeichen
Go Tabs (gofmt)
C / C++ Tabs

Alle anderen Sprachen tragen bewusst keinen Standard und folgen Ihrer globalen Einrückungseinstellung. Wird die Sprache eines Dokuments von Hand gewechselt (Menü Sprache), wird der passende Standard sofort erneut angewendet.

Der Standard steht in der Definitionsdatei der Sprache (colorizers/<id>.json, Schlüssel "indent": { "style": "tabs|spaces", "width": N }). Power-User können einen mitgelieferten Standard ändern, indem sie eine bearbeitete Kopie dieser Datei in das Benutzer-Override-Verzeichnis legen — der Katalog ersetzt Definitionen anhand ihrer id.

Geplant: sprachspezifische Overrides in den Einstellungen

Eine Einstellungstabelle zum Übersteuern dieser Standards pro Sprache (ohne JSON anzufassen) ist entworfen und als nächster Schritt dieser Funktion geplant; bis dahin sind der JSON-Override oben und die nachfolgenden Ebenen die Wege, die Einrückung zu steuern.

Woher die Einrückungseinheit kommt (Vorrang)

Wenn mehrere Quellen eine Meinung zur Einrückung haben, löst der Editor sie an einer Stelle auf und wendet den Gewinner an — höchster Vorrang zuerst:

  1. Die .editorconfig des Projekts — falls vorhanden und „.editorconfig-Einstellungen anwenden“ aktiv ist, gewinnen indent_style / indent_size / tab_width des Projekts für passende Dateien.
  2. Der mitgelieferte Standard der Sprache — die Tabelle oben, wenn die Sprache des Dokuments einen deklariert.
  3. Ihre globale Einrückungseinstellung — die Wahl Tabs / Leerzeichen / Auto oben.

Ein Projekt mit .editorconfig übersteuert also alles für die Dateien dieses Projekts; eine Python-Datei außerhalb eines solchen Projekts rückt mit PEP-8-Leerzeichen ein, selbst wenn Ihre globale Einstellung Tabs ist; und alles andere folgt Ihrer globalen Einstellung. Die Einrückung eines Dokuments können Sie danach jederzeit von Hand ändern.

Der Vorrang gilt in dem Moment, in dem sich etwas ändert: Wird in den Einstellungen eine andere Wahl Tabs / Leerzeichen / Auto angewendet, wird das geöffnete Dokument sofort neu aufgelöst — eine von einer .editorconfig oder einem Sprachstandard bestimmte Datei behält ihre Einrückung, ohne dass Sie den Tab wechseln müssen.

Mehrere Cursor

Alles Obige gilt an jedem Cursor, wenn Sie mit mehreren Cursorn arbeiten: Ein getipptes ( fügt an jedem () ein, Enter behält die Einrückung jeder Zeile bei, und Backspace zwischen leeren Paaren löscht an jedem Cursor beide Zeichen. Ein einziges Rückgängig nimmt die gesamte Mehrcursor-Bearbeitung in einem Schritt zurück.

Backspace bei gemischten Cursorn

Backspace löscht Paare nur, wenn jeder Cursor zwischen einem leeren Paar steht. Stehen einige Cursor woanders, fällt Backspace an allen auf sein normales Verhalten zurück — es löscht also nie an einem Cursor einen verirrten Schließer, während an einem anderen ein Wort bearbeitet wird.

In Kommentaren und Zeichenketten

Ist ein Syntax-Colorizer aktiv, halten sich Auto-Paarung und das klammergesteuerte Blocköffnen in Kommentaren und Zeichenketten-/Zeichenliteralen zurück — dort ist ein { oder " gewöhnlicher Text, kein Code, also lässt der Editor ihn exakt so stehen, wie er getippt wurde. Die einfache Einrückung (Übernahme des Leerraums der Vorzeile) funktioniert weiterhin. In einem reinen Textdokument ohne Colorizer gibt es nichts zu unterdrücken, daher verhält sich die Paarung überall gleich.

Verwandte Themen