Przejdź do treści

Wtyczka Snippety

Wpisz krótki prefiks, naciśnij ++tab++, a rozwinie się w całą konstrukcję — pętlę for, szkielet klasy, tabelę Markdown — z kursorem gotowym na pierwszym polu do uzupełnienia. Tab/Shift+Tab przechodzą między polami, Esc kończy. Wtyczka dostarcza też Plik ▸ Nowy z szablonu… do tworzenia całych plików.

Rozwijanie snippetu

  1. Wpisz prefiks snippetu (np. for w pliku C++).
  2. Naciśnij ++tab++. Prefiks zostaje zastąpiony ciałem snippetu — jako jeden krok cofania — a pierwsze pole jest zaznaczone, gotowe do nadpisania.
  3. Naciśnij ++tab++, aby skoczyć do następnego pola, ++shift+tab++, aby wrócić.
  4. Po ostatnim polu ++tab++ ustawia kursor w końcowej pozycji snippetu. ++esc++ kończy sesję w dowolnym momencie, zostawiając tekst tak, jak jest.

Jeśli słowo przed kursorem nie jest prefiksem snippetu, ++tab++ robi zwykłe wcięcie — klawisz jest pożyczany tylko wtedy, gdy jest co rozwinąć. Gdy otwarte jest okienko autouzupełniania, ++tab++ należy do okienka.

Wielolinijkowe rozwinięcie dziedziczy wcięcie linii, w której je wpisano, a jego końce linii podążają za konwencją dokumentu (CRLF/LF).

Snippety w okienku autouzupełniania

Prefiksy snippetów pojawiają się też w okienku autouzupełniania, oznaczone małym glifem odróżniającym je od zwykłych słów. Zaakceptowanie pozycji snippetu rozwija go natychmiast i zaczyna sesję pól — tak samo jak wpisanie prefiksu i naciśnięcie ++tab++.

Co może zawierać snippet

Token Znaczenie
$1$9 Pola tab-stop, odwiedzane w kolejności numerycznej (niezależnie od pozycji w ciele).
${1:default} Pole z treścią początkową, zaznaczaną przy odwiedzeniu.
$0 Miejsce, w którym kursor ląduje po ostatnim polu (domyślnie koniec snippetu).
$FILENAME Nazwa pliku dokumentu (pusta dla niezapisanych buforów).
$DATE Dzisiejsza data w formacie ISO (2026-07-06).
$SELECTION Tekst zaznaczony w chwili wyzwolenia snippetu.
$CLIPBOARD Bieżący tekst schowka.
\$ Dosłowny znak dolara.

Wszystko zniekształcone jest wstawiane dosłownie zamiast kończyć się błędem. Powtórzony w ciele indeks pola zachowuje jako żywe pole tylko pierwsze wystąpienie.

Zarządzanie snippetami

Preferencje ▸ Snippety wymienia każdy snippet — zestawy dołączone i Twoje własne. Stamtąd możesz:

  • Dodać… nowy snippet: prefiks, zakres (identyfikatory języków po przecinku, np. cpp, c; pusty lub * działa wszędzie), opis i ciało.
  • Edytować… swoje snippety. Edycja snippetu dołączonego tworzy Twoją kopię, która ma pierwszeństwo przed dołączonym (ten sam prefiks i zakres).
  • Usuwać swoje snippety (dołączonych nie da się usunąć — zamiast tego je przesłoń).

Dołączone zestawy obejmują C/C++, Pythona, JavaScript/TypeScript i Markdown, plus dwa uniwersalne pomocniki (date, clip). Twoje snippety są zapisywane jako JSON w katalogu danych wtyczki (snippets/user.json); możesz tam też wrzucać dodatkowe pliki *.json — format odpowiada plikom dołączonym:

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

Ciała są tablicami linii. Tablica "scopes" per snippet nadpisuje domyślne "language" z poziomu pliku.

Szablony plików

Plik ▸ Nowy z szablonu… otwiera wybór szkieletów plików — źródło C++ z main, nagłówek z include guardem, skrypt Pythona, dokument Markdown, strona HTML. Wybrany szablon otwiera się jako nowy, niezapisany dokument z już podstawionymi zmiennymi ($DATE, $CLIPBOARD, …); tokeny pól zwijają się do swojego tekstu domyślnego.

Szablony to też pliki JSON (templates/*.json, zarówno dołączone, jak i w katalogu danych wtyczki):

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

Ograniczenia

  • Powtórzony indeks pola nie jest lustrzany (pisanie w polu 1 nie aktualizuje drugiego $1); kolejne wystąpienia to zwykły tekst.
  • Zagnieżdżone pola (${1:${2:x}}) nie są obsługiwane; tekst wewnętrzny trafia dosłownie.
  • $FILENAME jest pusty w niezapisanych buforach.