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 indon'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:
- 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.
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 ▸ Erweiterungen ▸ Einrückung:
| Stil | Verhalten |
|---|---|
| Tabulatoren (Standard für neue Dateien) | Eine Ebene ist ein echtes Tabulatorzeichen; Leerzeichen pro Einrückung legt seine sichtbare Breite fest. |
| Leerzeichen | Eine Ebene besteht aus Leerzeichen pro Einrückung Leerzeichen. |
| Automatisch (aus 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 Tabulatoren 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+[ |
Einen Codeblock einfügen¶
Kopieren Sie ein paar Zeilen, die ihre eigene Einrückung tragen — etwa drei Zeilen, die jeweils mit zwölf Leerzeichen beginnen — und fügen Sie sie an einem eingerückten Cursor ein. Wörtlich eingefügt landete die erste Zeile bei Ihrer Einrückung plus den zwölf Leerzeichen des Blocks (weit rechts) und jede folgende Zeile in Spalte 0 plus zwölf — das Ganze müssten Sie von Hand nachziehen.
OctoEdit rückt den Block stattdessen für Sie ein: die Einrückung, die sich die Zeilen des Blocks teilen, wird entfernt, die erste Zeile landet dort, wo der Cursor ohnehin steht, und jede folgende Zeile bekommt die Einrückung der Cursorzeile plus die Einrückung, die sie innerhalb des Blocks hatte. Die innere Struktur des Blocks bleibt exakt erhalten; Tabs bleiben Tabs und Leerzeichen bleiben Leerzeichen.
Ersetzt wird nur die führende Einrückung: der Block behält seine eigenen Einrückungszeichen, ein mit Leerzeichen eingerückter Block bleibt in einem mit Tabs eingerückten Dokument innen also leerzeichen-eingerückt. Die innere Einrückung des Blocks in den Stil des Dokuments umzuwandeln ist eine mögliche künftige Option — der Editor tut das heute nicht.
Das gilt nur für ein Einfügen, das eindeutig ein Block ist:
- die Zwischenablage enthält mehr als eine Zeile;
- es gibt einen Cursor und keine rechteckige (Spalten-)Auswahl;
- zwischen Zeilenanfang und Cursor steht nichts als Leerraum — ein Einfügen mitten in eine Zeile ist eine Einschiebung und bleibt wörtlich.
Alles andere wird eingefügt wie bisher. Das gesamte Einfügen ist ein einziger Rückgängig-Schritt, und eine Auswahl wird wie gewohnt ersetzt.
Abschalten lässt es sich mit Eingefügte Zeilen an die Einrückung des Cursors anpassen unter Einstellungen ▸ Erweiterungen ▸ Einrückung (standardmäßig an).
Als Markdown einfügen (Ctrl+Shift+V) durchläuft dieselbe Regel. Der
umgewandelte Text ist ein Block, der in Spalte 0 beginnt und dessen
verschachtelte Listeneinträge relativ dazu eingerückt sind; an einem
eingerückten Cursor erhält daher jede Zeile die Einrückung des Cursors, und
die Verschachtelung bleibt exakt erhalten. Was der Befehl tut, beschreibt
Bearbeiten.
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:
- Die
.editorconfigdes Projekts — falls vorhanden und „.editorconfig-Einstellungen anwenden“ aktiv ist, gewinnenindent_style/indent_size/tab_widthdes Projekts für passende Dateien. - Der mitgelieferte Standard der Sprache — die Tabelle oben, wenn die Sprache des Dokuments einen deklariert.
- 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¶
- Einrückungs-Plugin — die Einstellung des Einrückungsstils und die Befehle Einzug vergrößern/verkleinern.
- EditorConfig — projektspezifische Einrückung, die Ihre globale Einstellung übersteuert.
- Bearbeiten mit mehreren Cursorn — mehrere Cursor setzen und gleichzeitig bearbeiten.