Code-Editor

Öffnen, hervorheben und formatieren

Text-/Codedateien werden im Editor (Scintilla) mit Syntaxhervorhebung geöffnet. Es gibt Aus-/Einkommentieren (Strg+/), Zeile verschieben und duplizieren, Lesezeichen (Strg+F2), eine Symbol-/Funktionsliste, wortbasierte Autovervollständigung, Einrückungshilfen, Zeilenumbruch, Zoom und die Erkennung von Dateiänderungen auf der Festplatte. Bei aktivierter Versionsverwaltung markiert der Rand die seit der letzten Version hinzugefügten/geänderten Zeilen.

Es gibt außerdem Makros (eine Folge von Bearbeitungen mit Strg+Umschalt+R / F4 aufzeichnen/abspielen, unter Werkzeuge → Ausführen → Makros), Formatieren/Verschönern (Umschalt+Alt+F), eine ASCII-Tabelle in der Tab-Toolbar (zum Einfügen von Zeichen/Rahmenzeichnung) und eine Rechtschreibprüfung (Hunspell). pt-BR und en-US sind eingebaut; weitere Sprachen lädst du bei Bedarf herunter aus der Tabelle unter Einstellungen → Notizen & Schreiben → Rechtschreibung (eine Zeile pro Sprache, mit Schaltfläche Herunterladen/Entfernen). Um einer wachsenden Logdatei zu folgen, verwende die Schaltfläche Überwachen (tail -f) in der Tab-eigenen Toolbar. Sehr große Dateien (über ~1 MB) öffnen sich in einem virtualisierten leichten Editor, der nur die sichtbaren Abschnitte lädt; du kannst ihn über Öffnen → Im leichten Editor öffnen... erzwingen. Reicht der Speicher nicht, um alle Zeilen zu indizieren, warnt der Streifen des Editors, und nur die ersten Zeilen sind verfügbar.

Formatieren und prüfen (Linter): Umschalt+Alt+F formatiert das Dokument. JSON, XML und SQL formatiert LightNote selbst, ohne Installation — und ändert dabei nur Leerraum: Reihenfolge der Schlüssel, Zahlen und Texte bleiben genau so, wie Sie sie geschrieben haben. Maßgeblich ist der Typ in der Statusleiste, nicht nur die Dateiendung: Fügen Sie in einem Entwurf-Tab das JSON ein, wählen Sie JSON als Typ und formatieren Sie (ein Text, der mit {, [ oder < beginnt, wird auch ohne Auswahl erkannt). Bei einem Fehler bleibt der Text unverändert: Die Stelle wird rot unterstrichen, der Cursor springt dorthin und die Statusleiste nennt Zeile, Spalte und Grund (fehlendes Komma, Schlüssel ohne Anführungszeichen…). Der Pfeil der Schaltfläche Formatieren bietet Komprimieren (JSON oder XML in einer einzigen Zeile), und mit einer Auswahl wirken beide nur auf sie — praktisch für JSON in einer Protokollzeile. Ein Text mit einem vollständigen JSON-Dokument pro Zeile (JSON Lines, auch NDJSON genannt – üblich in Protokollen und Exporten) wird erkannt und Zeile für Zeile formatiert, ohne zu einem einzigen Dokument zu werden.

F7 prüft: JSON und XML werden direkt im Text geprüft, ohne Speichern; für die übrigen Sprachen läuft der Linter (ruff, eslint, shellcheck, luacheck…), der die Probleme im Editor und im Panel Probleme markiert (unteres Panel, navigierbar). Andere Sprachen nutzen einen externen Formatierer (black, prettier, clang-format, gofmt, rustfmt…); hat der Typ noch keinen, öffnen Formatieren, F7 und F5 einen Assistenten, der nur die Werkzeuge für diesen Typ zeigt, angibt, welche schon installiert sind, und das gewählte mit einem Klick installiert (oder den Befehl eines anderen Programms übernimmt). Die vollständigen Listen stehen unter Einstellungen → Code-Werkzeuge → Formatierer nach Sprache und → Linter nach Sprache, mit den Optionen Beim Speichern formatieren / Beim Speichern prüfen. Führe die Datei im Ausgabe-Panel mit F6 aus (erfasst Exit-Code und Dauer, mit Stoppen/Neustart) oder nur einen Abschnitt mit F8.

Von einem Format in ein anderes umwandeln: Das Untermenü Konvertieren steht unter Bearbeiten, im Pfeil der Schaltfläche Formatieren, im Typmenü der Statusleiste und im Rechtsklickmenü des Editors – auch in einer Notiz. Es wirkt auf die Auswahl oder auf den ganzen Text, wenn nichts ausgewählt ist. Oben steht, was erkannt wurde („Auswahl: JSON“, „Ganzer Text: CSV“), und zuerst kommen die Umwandlungen, die zu diesem Inhalt passen; die übrigen stehen in Gruppen, ausgegraut mit dem Grund, wenn sie nicht passen. Es gibt JSON ↔ YAML, JSON ↔ XML (Attribute werden zu @name), JSON ↔ CSV und JSON → Markdown-Tabelle (ein verschachteltes Objekt wird zur Spalte a.b), CSV ↔ Markdown-Tabelle, CSV → SQL-INSERT, JSON Lines (NDJSON) ↔ JSON-Array, HTML ↔ Markdown, URL-Parameter ↔ JSON, Base64, URL-Kodierung, HTML-Entitäten, JSON-String und Unix-Zeitstempel ↔ ISO-8601-Datum. Reihenfolge der Schlüssel und Zahlen bleiben, wie Sie sie geschrieben haben, und CSV erkennt das ; von Excel. Den ganzen Text umzuwandeln ändert auch den Typ des Tabs (das zur Tabelle gewordene CSV wird Markdown), die Datei behält aber ihre Endung – die Statusleiste weist darauf hin. In einem JSON benennt das Untermenü Feldnamen nur die Schlüssel in camelCase, PascalCase, snake_case oder kebab-case um: Werte, Zahlen und Einrückung bleiben, wie sie sind, und nichts ändert sich, wenn zwei Felder desselben Objekts denselben Namen bekämen. Die Namensstile (camelCase, PascalCase, snake_case, kebab-case und KONSTANTEN_CASE) stehen unter Bearbeiten → Schreibweise, unter GROSSBUCHSTABEN, kleinbuchstaben und Großer Anfangsbuchstabe. Sie wirken auf die Auswahl oder, ohne Auswahl, auf den Namen unter dem Cursor – nie auf die ganze Datei – und ändern nur die Namen: Anführungszeichen, Doppelpunkte und Klammern bleiben, wo sie waren. Eine Zeile, die nur aus einer Wortgruppe besteht („name des kunden“), wird zu einem einzigen Namen (nameDesKunden).

Eine als Code geöffnete .md wird mit einem Klick wieder zur Notiz. Die Editor-Leiste zeigt Als Notiz öffnen, wenn die geöffnete Datei eine Notiz ist — das Gegenstück zu Öffnen als → Code im Baummenü. Der Tab kehrt zur Notizansicht zurück, mit formatierter Bearbeitung, Lesemodus, Gliederung und Eigenschaften. Die Schaltfläche erscheint nur, wenn der Wechsel möglich ist: eine zu große Notiz bleibt im Code-Editor.

Mehrfachcursor, Verlauf und Definition

Weitere Bearbeitungsfunktionen: Mehrfachcursor pro Vorkommen (Strg+D, alle mit Alt+F3), Zeile duplizieren (Strg+Umschalt+D), Zeilen zusammenführen (Strg+Umschalt+J), Auswahl nach Gültigkeitsbereich erweitern/verkleinern (Strg+Umschalt+Leertaste / Strg+Alt+Leertaste), Blockauswahl (Alt+Ziehen), alles ein-/ausklappen, Snippets (Strg+J, bearbeitbar unter Einstellungen → Editor), Zu Symbol in der Datei springen (# in der Palette) und im Projekt (Strg+T oder ##), Navigationsverlauf (Alt+←/→), eine Navigationsleiste (Breadcrumbs) oben im Editor, Spalten-Lineale, Einfärbung von Klammerpaaren, automatisches Schließen/Umschließen von Paaren und Bereinigung beim Speichern (Leerzeichen entfernen, abschließender Zeilenumbruch) — alles unter Einstellungen → Editor.

Snippets mit Tab. Tippen Sie das Kürzel und drücken Sie Tab: In einer SQL-Datei wird sf zu SELECT * FROM TABLE;, mit TABLE bereits markiert — tippen Sie den Tabellennamen, und Tab springt zum nächsten Feld (Umschalt+Tab zurück, Esc beendet). Fertig enthalten sind sf, sc, sw, sj, sg, ins, upd und del (die letzten beiden schon mit WHERE). Jedes Snippet gilt für eine Sprache oder für alle, und unter Einstellungen → Editor legen Sie eigene in jeder Sprache an, mit Feldern ${1:NAME}, Wiederholungen $1 und dem Ende des Cursors $0; ein Rechtsklick auf eine Auswahl bietet Snippet aus Auswahl erstellen. Snippets erscheinen auch in der Vervollständigungsliste. Ist die Liste offen, gehört Tab ihr; damit Tab keine Snippets erweitert, schalten Sie Snippets mit Tab erweitern aus — Strg+J funktioniert weiterhin.

Lokaler Verlauf und Zwischenablage: Bei jedem Speichern behält LightNote eine Version der Datei (Datei → Lokaler Verlauf…, wiederherstellbar), unabhängig von Git. Strg+Alt+V öffnet den Verlauf der Zwischenablage, um einen zuvor kopierten Eintrag einzufügen. Strg+Umschalt+T öffnet den zuletzt geschlossenen Tab wieder; Tabs lassen sich anheften (Kontextmenü), was sie vor der Freigabe bei Inaktivität schützt.

Zur Definition springen: F12 oder Strg+Klick auf einen Bezeichner springt dorthin, wo er im Arbeitsbereich definiert ist; Umschalt+F12 findet seine Verwendungen.

Minimap und Textoperationen

Minimap. Eine Miniaturansicht des gesamten Dokuments liegt am rechten Rand des Editors: Sie zeigt die „Form“ des Codes (die Farben der Syntaxhervorhebung verkleinert) und markiert den sichtbaren Bereich. Klicken oder ziehen Sie darin, um an eine beliebige Stelle der Datei zu springen. Ein-/ausschalten unter Ansicht → Minimap oder Einstellungen → Editor. Die Schaltfläche Minimap in der Leiste des Code-Tabs (neben ASCII) schaltet sie um, ohne den Editor zu verlassen. Am linken Rand der Miniatur verläuft ein Markierungsstreifen: Blau für Zeilen mit Lesezeichen (derselbe Punkt wie am Rand) und Bernstein für Treffer der Schnellsuche — so sehen Sie auf einen Blick, wie sie sich über die gesamte Datei verteilen, auch außerhalb des sichtbaren Bereichs.

Textoperationen. Im Menü Bearbeiten — und im Kontextmenü des Editors — liegen die Untermenüs Zeilen (verschieben, duplizieren, löschen, sortieren, verbinden, umkehren, nummerieren) und Bereinigung (Leerzeichen entfernen, leere/doppelte Zeilen entfernen, Tabulatoren ↔ Leerzeichen). Mit einer Auswahl bietet das Kontextmenü zusätzlich Auswahl als neue Datei speichern…: der Ausschnitt wird in eine Datei neben der aktuellen geschrieben und in einem Tab geöffnet (das Original bleibt unverändert).

Einrückung, Kommentare und Klammern

Einrückung der Datei. In der Statusleiste zeigt neben dem Zeilenende die Schaltfläche Leerzeichen: 4 (oder Tab: 4), wie der Tab einrückt. Ein Klick öffnet das Menü: Mit Leerzeichen einrücken oder Mit Tabulator einrücken, die Einrückungsbreite (2, 3, 4 oder 8 Spalten), Einrückung in Leerzeichen umwandeln und in Tabulatoren (schreibt die Einrückung der vorhandenen Zeilen um), Aus dem Inhalt erkennen und Als Standard verwenden, das die Wahl für neue Dateien speichert. Was du dort wählst, gilt für diesen Tab.

Woher die Einrückung kommt. Beim Öffnen einer Datei sucht LightNote eine .editorconfig in ihrem Ordner und den Ordnern darüber (bis zu einer mit root = true) und wendet indent_style, indent_size und tab_width an; trim_trailing_whitespace und insert_final_newline gelten beim Speichern, end_of_line und charset nur bei einer neuen Datei. Ohne .editorconfig schaut es sich die Zeilen der Datei selbst an und übernimmt die Einrückung, die es findet, wenn sie eindeutig ist; sonst bleibt der Standard. Die Reihenfolge ist also: .editorconfig, dann die Datei, dann der Standard aus Einstellungen → Editor, wo Standardeinrückung, Einrückung jeder Datei beim Öffnen erkennen und .editorconfig des Arbeitsbereichs beachten stehen.

Intelligente Einrückung. Enter nach {, ( oder [ – und nach : am Zeilenende, nur in Python – öffnet die nächste Zeile eine Ebene tiefer. Zwischen {} öffnet Enter den Block auf drei Zeilen, mit dem Cursor in der mittleren, und ein einziges Strg+Z macht alles rückgängig. Ein }, ) oder ], das in einer leeren Zeile getippt wird, springt auf die Einrückung der Zeile zurück, die es geöffnet hat. Damit Enter nur die Einrückung der Zeile darüber übernimmt, schalte Intelligente Einrückung unter Einstellungen → Editor aus.

Kommentare, Klammern und Vervollständigung. Strg+/ kommentiert in der Syntax der Sprache, die der Tab verwendet – auch in einem Entwurf ohne Datei und wenn du die Syntaxhervorhebung in der Statusleiste wechselst –, und wo die Sprache nur Blockkommentare kennt (HTML, CSS), nimmt es den Blockkommentar. Strg+Umschalt+\ setzt den Cursor auf das Gegenstück der runden, eckigen oder geschweiften Klammer, an der er steht, und Strg+Umschalt+Alt+\ markiert bis dorthin; beide stehen auch im Kontextmenü. Nach den Wörtern des Dokuments bringt die Vervollständigungsliste die Schlüsselwörter der Sprache (def, return…), auch die, die noch nicht in der Datei stehen. Und Ansicht → Zeilennummern blendet den nummerierten Rand aus oder ein.

Zuletzt verwendete Tabs (Strg+Tab)

Strg+Tab kehrt zu dem Tab zurück, den du davor benutzt hast, im selben Bereich – nicht zum Nachbar-Tab. Mit gedrückter Strg-Taste geht jedes Tab in der Liste der zuletzt verwendeten Tabs weiter nach unten, die in der Mitte des Bereichs erscheint; beim Loslassen von Strg öffnet sich der gewählte, und Esc bricht ab. Strg+Umschalt+Tab läuft in umgekehrter Reihenfolge. Jeder Bereich hat seine eigene Liste, ein geschlossener Tab fällt heraus, und bei nur einem Tab erscheint nichts.

Bereiche nebeneinander und im Raster

Das Raster. Der Bearbeitungsbereich teilt sich in Bereiche mit jeweils eigenen Tabs, angeordnet in Zeilen und Spalten: Eine Zeile enthält einen oder mehrere Bereiche nebeneinander, und die Zeilen liegen übereinander. Der Bereich oben links ist der Hauptbereich und verschwindet nie, und die letzte Zeile ist die der Terminals. Ein Bereich entsteht nur, wenn du ihn anforderst, und verschwindet von selbst, wenn sein letzter Tab ihn verlässt.

Teilen. Fenster → Nach rechts teilen öffnet eine zweite Ansicht des aktiven Tabs in einer neuen Spalte, direkt rechts neben dem Bereich, in dem du bist; Fenster → Layout → Nach unten teilen tut dasselbe in einer neuen Zeile, direkt unter der Zeile des aktiven Bereichs und über der Zeile der Terminals. Beide Ansichten bearbeiten denselben Text. Ist für einen weiteren Bereich kein Platz, kommt die Ansicht in den Nachbarbereich. Fenster → Teilung aufheben schließt den Bereich rechts vom Hauptbereich. Die Schaltfläche Teilen in der Symbolleiste bietet dieselben Einträge.

Einen Tab ziehen. Während du einen Tab ziehst, zeigt jeder Bereich einen Streifen am rechten Rand und einen am unteren Rand: Loslassen auf dem rechten erzeugt eine Spalte direkt rechts von diesem Bereich, auf dem unteren eine Zeile direkt darunter. Die Streifen am Fuß der Fläche bringen den Tab in die Zeile der Terminals. Ein Streifen, der mangels Platz keinen Bereich erzeugen könnte, erscheint nicht. Im Menü des Tabs (Rechtsklick) macht In einen neuen Bereich rechts verschieben dasselbe ohne Ziehen, und In den nächsten Bereich verschieben und In den vorherigen Bereich verschieben bringen ihn zu einem Nachbarn.

Fertige Layouts. Fenster → Layout (auch über die Schaltfläche Teilen) ordnet das Raster in einem Schritt: 1 Bereich, 2 Spalten, 3 Spalten oder Raster 2×2. Ein Layout anzuwenden schließt nie einen Tab: Die Tabs eines überzähligen Bereichs wandern in den Nachbarn, der bleibt, und die Terminals ändern sich nicht. Größen angleichen gibt den Spalten jeder Zeile dieselbe Breite und den Zeilen dieselbe Höhe. Ein Layout, das auf diesen Bildschirm nicht passt, ist deaktiviert, und der Tooltip sagt, warum.

Leerer Bereich. Ein Bereich, den ein Layout leer anlegt, zeigt Ziehen Sie einen Tab hierher, oder klicken Sie hier und öffnen Sie eine Datei: Ein Klick wählt ihn aus, und die nächste Datei, die du öffnest, landet darin. Er verschwindet nicht von selbst; die Schaltfläche Bereich schließen entfernt ihn.

Wie viele Bereiche passen. Die Grenze ergibt sich aus der Bildschirmgröße, nicht aus einer Zahl: Eine neue Spalte entsteht nur, wenn jeder Bereich der Zeile mindestens etwa 420 Pixel breit bleibt, und eine neue Zeile nur, wenn jede Zeile etwa 240 hoch bleibt – zwei Spalten und zwei Zeilen passen aber immer. Auf einem Notebook bleibt das Raster bei zwei Spalten; auf einem Ultrawide-Monitor passen vier oder fünf.

Per Tastatur. Strg+Alt+PgDn und Strg+Alt+PgUp bringen den Fokus in den nächsten und den vorherigen Bereich, Zeile für Zeile, am Ende wieder von vorn; die Terminals zählen mit. In Fenster → Layout stehen außerdem Tab in den nächsten Bereich verschieben und Tab in den vorherigen Bereich verschieben.

Beim erneuten Öffnen des Ordners. Das Raster kehrt so zurück, wie du es verlassen hast: die Zeilen, die Spalten, die Größen und die Tabs jedes Bereichs (die ihre Datei erst laden, wenn du sie auswählst). Auf einem kleineren Bildschirm geöffnet, werden die Spalten, die nicht passen, in der letzten zusammengeführt, die gepasst hat – kein Tab geht verloren.

Projektaufgaben

Build, Tests und Lint des Projekts laufen ohne Umweg über das Terminal, unter Werkzeuge → Projektaufgaben. LightNote findet die Aufgaben des geöffneten Ordners selbst: die scripts der package.json (mit npm, pnpm oder yarn, je nach vorhandener Lock-Datei), die Ziele des Makefile, die buildPresets der CMakePresets.json, cargo build/test/run/check in einem Rust-Projekt, pytest in einer pyproject.toml, die es konfiguriert, und die Rezepte der justfile.

Eigene Aufgaben. Von Hand geschriebene Aufgaben stehen in einer tasks.json im Format von VS Code (Version 2.0.0), gelesen aus .vscode/tasks.json und aus .lightnote/tasks.json: Wer die von VS Code schon hat, muss nichts schreiben. Unterstützt werden label, type (shell oder process), command, args, options.cwd und options.env, group mit isDefault, die Blöcke windows/linux/osx, Kommentare und die Variablen ${workspaceFolder}, ${file}, ${fileDirname} und ${fileBasenameNoExtension}. Eine fehlerhafte Datei erscheint mit dem Grund im Menü und wird ignoriert; gelesen werden bis zu 200 Aufgaben.

Ausführen. Wähle die Aufgabe im Menü, oder drücke Strg+Umschalt+B, um die Standardaufgabe auszuführen: die unter Werkzeuge → Projektaufgaben → Standardaufgabe gewählte (pro Ordner gespeichert); ohne Wahl die, die die tasks.json mit isDefault markiert; ohne beides fragt LightNote, welche laufen soll. Die Ausgabe geht in das Ausgabe-Panel, mit dem Exit-Code und der Stopp-Schaltfläche. Projektaufgaben bearbeiten öffnet die .vscode/tasks.json, wenn es sie gibt, oder legt eine .lightnote/tasks.json mit einem Beispiel an. Ist das Programm einer Aufgabe nicht installiert, nennt die Statusleiste es und bietet Externe Programme an.

Sprachserver (LSP)

Ohne Einrichtung suchen Zur Definition springen, Verwendungen suchen, Umbenennen und die Vervollständigung nach dem Namen: Das ist schnell, versteht aber keine Gültigkeitsbereiche. Ein Sprachserver (LSP) ist ein eigenes Programm – dasselbe, das VS Code verwendet –, das die Sprache wirklich versteht. Er ist ausgeschaltet: Schalte ihn unter Einstellungen → Code-Werkzeuge in der Gruppe Sprachserver (LSP) ein, oder unter Werkzeuge → Sprachserver → Sprachserver verwenden (LSP). Jeder Dateityp hat seinen eigenen: pyright (Python), typescript-language-server (JavaScript und TypeScript), clangd (C und C++), gopls (Go), rust-analyzer (Rust), lua-language-server (Lua) und bash-language-server (Shell).

Was sich ändert. Mit aktivem Server springt F12 zu der Definition, die er nennt, Umschalt+F12 listet die echten Verwendungen im Suchbereich, und Umbenennen ändert nur das richtige Symbol: LightNote fragt „In N Dateien umbenennen?“, ändert die geöffneten Tabs (ein Strg+Z macht es in jedem rückgängig) und schreibt die geschlossenen Dateien unter Beibehaltung ihrer Kodierung. Die Vervollständigung bringt, was der Server vorschlägt, Fehler werden unterstrichen und im Bereich Probleme aufgelistet, der Tooltip über einem Namen zeigt Typ und Dokumentation, und Umschalt+Alt+F formatiert über den Server, wenn für den Typ kein Formatierer eingerichtet ist. Antwortet der Server nicht, braucht er zu lange (die Vervollständigung wartet 1,5 s) oder weiß er keine Antwort, gilt wie bisher die Suche nach dem Namen; ein eingerichteter Linter gilt weiterhin bei Strg+S.

Die Anzeige und die Installation. In der Statusleiste zeigt eine Anzeige den Server des Tabs und seinen Zustand (pyright · bereit, wird gestartet…, Fehler, nicht installiert); ein Klick darauf bringt Server neu starten, Server anhalten, Protokoll anzeigen… und die Konfiguration. Zum Installieren nimm Werkzeuge → Sprachserver → Für .py konfigurieren…: Derselbe Assistent wie bei den Formatierern zeigt den Befehl und installiert mit einem Klick – das Öffnen eines Tabs bietet nie an, etwas zu installieren. Der Server startet mit dem ersten Tab seines Typs und hält 5 Minuten nach dem Schließen des letzten an; höchstens 4 laufen gleichzeitig, eine Datei über 1 MB wird ihm nicht geschickt, und jede Datei zeigt bis zu 500 Fehler.

Inhalt

Bearbeiten

Werkzeuge

Automatisierung (KI / Skripte)

Referenz