Zum Inhalt

Snippets-Plugin

Tippen Sie ein kurzes Präfix, drücken Sie ++tab++, und es entfaltet sich zu einem ganzen Konstrukt — einer for-Schleife, einem Klassengerüst, einer Markdown-Tabelle — mit dem Cursor auf der ersten auszufüllenden Stelle. Tab/Shift+Tab wechseln zwischen den Feldern, Esc beendet. Das Plugin liefert außerdem Datei ▸ Neu aus Vorlage… zum Aufsetzen ganzer Dateien.

Ein Snippet entfalten

  1. Tippen Sie das Präfix eines Snippets (etwa for in einer C++-Datei).
  2. Drücken Sie ++tab++. Das Präfix wird durch den Snippet-Körper ersetzt — als ein Rückgängig-Schritt — und das erste Feld ist ausgewählt, bereit zum Übertippen.
  3. ++tab++ springt zum nächsten Feld, ++shift+tab++ zurück.
  4. Nach dem letzten Feld setzt ++tab++ den Cursor an die Endposition des Snippets. ++esc++ beendet die Sitzung jederzeit und lässt den Text wie getippt stehen.

Ist das Wort vor dem Cursor kein Snippet-Präfix, rückt ++tab++ wie üblich ein — die Taste wird nur ausgeliehen, wenn es etwas zu entfalten gibt. Ist das Vervollständigungs-Popup offen, gehört ++tab++ dem Popup.

Eine mehrzeilige Entfaltung erbt die Einrückung der Zeile, in der Sie sie getippt haben, und ihre Zeilenenden folgen der Konvention des Dokuments (CRLF/LF).

Snippets im Vervollständigungs-Popup

Snippet-Präfixe erscheinen auch im Autovervollständigungs-Popup, markiert mit einem kleinen Zeichen, das sie von normalen Wörtern abhebt. Das Annehmen eines Snippet-Eintrags entfaltet ihn sofort und startet die Feldsitzung — genau wie das Tippen des Präfixes plus ++tab++.

Was ein Snippet enthalten kann

Token Bedeutung
$1$9 Tabstopp-Felder, in numerischer Reihenfolge besucht (unabhängig von ihrer Position im Körper).
${1:default} Ein Feld mit Anfangsinhalt, beim Besuch ausgewählt.
$0 Wo der Cursor nach dem letzten Feld landet (Standard: das Ende des Snippets).
$FILENAME Der Dateiname des Dokuments (leer bei ungespeicherten Puffern).
$DATE Das heutige Datum im ISO-Format (2026-07-06).
$SELECTION Der beim Auslösen des Snippets ausgewählte Text.
$CLIPBOARD Der aktuelle Text der Zwischenablage.
\$ Ein wörtliches Dollarzeichen.

Alles Fehlgeformte wird wörtlich eingefügt statt zu scheitern. Ein im Körper wiederholter Feldindex behält nur sein erstes Vorkommen als lebendiges Feld.

Snippets verwalten

Einstellungen ▸ Snippets listet jedes Snippet — die mitgelieferten Sätze und Ihre eigenen. Dort können Sie:

  • Hinzufügen… — ein neues Snippet: Präfix, Geltungsbereich (kommagetrennte Sprach-IDs wie cpp, c; leer oder * gilt überall), Beschreibung und Körper.
  • Bearbeiten… — Ihre Snippets. Das Bearbeiten eines mitgelieferten Snippets erzeugt Ihre eigene Kopie, die Vorrang vor der mitgelieferten hat (gleiches Präfix und gleicher Geltungsbereich).
  • Entfernen — Ihre Snippets (mitgelieferte lassen sich nicht entfernen — überschatten Sie sie stattdessen).

Mitgelieferte Sätze gibt es für C/C++, Python, JavaScript/TypeScript und Markdown, plus zwei universelle Helfer (date, clip). Ihre Snippets liegen als JSON im Datenverzeichnis des Plugins (snippets/user.json); Sie können dort auch weitere *.json-Dateien ablegen — das Format entspricht den mitgelieferten Dateien:

{
    "language": ["cpp", "c"],
    "snippets": [
        {
            "prefix": "for",
            "description": "indexed for loop",
            "body": ["for (${1:int i = 0}; ${2:i < count}; ${3:++i})", "{", "\t$0", "}"]
        }
    ]
}

Körper sind Zeilen-Arrays. Ein "scopes"-Array pro Snippet übersteuert den Datei-weiten "language"-Standard.

Dateivorlagen

Datei ▸ Neu aus Vorlage… öffnet eine Auswahl von Dateigerüsten — eine C++-Quelle mit main, ein Header mit Include-Guard, ein Python-Skript, ein Markdown-Dokument, eine HTML-Seite. Die gewählte Vorlage öffnet sich als neues, ungespeichertes Dokument mit bereits ersetzten Variablen ($DATE, $CLIPBOARD, …); Feld-Tokens fallen auf ihren Standardtext zusammen.

Vorlagen sind ebenfalls JSON-Dateien (templates/*.json, mitgeliefert und im Datenverzeichnis des Plugins):

{
    "templates": [
        {
            "name": "Python script",
            "suggestedName": "script.py",
            "body": ["#!/usr/bin/env python3", "", ""]
        }
    ]
}

Grenzen

  • Ein wiederholter Feldindex wird nicht gespiegelt (Tippen in Feld 1 aktualisiert kein zweites $1); spätere Vorkommen sind normaler Text.
  • Verschachtelte Platzhalter (${1:${2:x}}) werden nicht unterstützt; der innere Text wird wörtlich übernommen.
  • $FILENAME ist in ungespeicherten Puffern leer.