Vai al contenuto

Plugin Frammenti

Digita un prefisso breve, premi ++tab++ e si espande in un intero costrutto: un ciclo for, lo scheletro di una classe, una tabella Markdown, con il cursore pronto sul primo spazio da riempire. Tab/Shift+Tab percorrono i campi, Esc conclude. Il plugin fornisce anche File ▸ Nuovo da modello… per generare interi file.

Espandere un frammento

  1. Digita il prefisso di un frammento (diciamo for in un file C++).
  2. Premi ++tab++. Il prefisso viene sostituito dal corpo del frammento —come un solo passo di annullamento— e il primo campo risulta selezionato, pronto per essere sovrascritto.
  3. Premi ++tab++ per saltare al campo successivo, ++shift+tab++ per tornare indietro.
  4. Dopo l'ultimo campo, ++tab++ posiziona il cursore nella posizione finale del frammento. ++esc++ conclude la sessione in qualsiasi momento, lasciando il testo come è stato digitato.

Se la parola prima del cursore non è un prefisso di frammento, ++tab++ rientra come di consueto: il tasto viene preso in prestito solo quando c'è qualcosa da espandere. Mentre la finestra di completamento è aperta, ++tab++ appartiene a quella finestra.

Un'espansione su più righe eredita il rientro della riga in cui l'hai digitata, e i suoi fine riga seguono la convenzione del documento (CRLF/LF).

Frammenti nella finestra di completamento

Anche i prefissi dei frammenti compaiono nella finestra di completamento automatico, marcati con un piccolo glifo perché risaltino tra le parole comuni. Accettare una voce di frammento lo espande subito e avvia la sessione dei campi: lo stesso che digitare il prefisso e premere ++tab++.

Che cosa può contenere un frammento

Elemento Significato
$1 … $9 Campi di arresto, visitati in ordine numerico (indipendentemente dalla loro posizione nel corpo).
${1:valore} Un campo con contenuto iniziale, selezionato quando viene visitato.
$0 Dove finisce il cursore dopo l'ultimo campo (per impostazione predefinita la fine del frammento).
$FILENAME Il nome di file del documento (vuoto nei buffer non salvati).
$DATE La data di oggi, in formato ISO (2026-07-06).
$SELECTION Il testo selezionato quando il frammento è stato attivato.
$CLIPBOARD Il testo attuale degli appunti.
\$ Un simbolo di dollaro letterale.

Tutto ciò che è malformato viene inserito alla lettera invece di fallire. Un indice di campo ripetuto nel corpo mantiene come campo attivo solo la prima occorrenza.

Gestire i frammenti

Preferenze ▸ Frammenti elenca ogni frammento: gli insiemi inclusi e i tuoi. Da lì:

  • Aggiungi… crea un frammento nuovo: prefisso, ambito (identificatori di linguaggio separati da virgola come cpp, c; vuoto o * vale ovunque), descrizione e corpo.
  • Modifica… modifica i tuoi frammenti. Modificare un frammento incluso crea una tua copia, che ha la precedenza su quello incluso (stesso prefisso e ambito).
  • Rimuovi rimuove i tuoi frammenti (quelli inclusi non si possono rimuovere: oscurali).

Vengono inclusi insiemi per C/C++, Python, JavaScript/TypeScript e Markdown, più due aiuti universali (date, clip). I tuoi frammenti vengono archiviati in JSON nella cartella dati del plugin (snippets/user.json); puoi anche metterci altri file *.json: il formato corrisponde a quello dei file inclusi.

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

I corpi sono array di righe. Un array "scopes" per frammento sostituisce il valore predefinito "language" del file.

Modelli di file

File ▸ Nuovo da modello… apre un selettore di impalcature di file: un sorgente C++ con main, un'intestazione con guardia di inclusione, uno script Python, un documento Markdown, una pagina HTML. Il modello scelto si apre come un documento nuovo non salvato con le sue variabili ($DATE, $CLIPBOARD, …) già sostituite; gli elementi di campo si riducono al loro testo predefinito.

Anche i modelli sono file JSON (templates/*.json, sia quelli inclusi sia quelli nella cartella dati del plugin):

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

Limitazioni

  • Un indice di campo ripetuto non viene rispecchiato (digitare nel campo 1 non aggiorna un secondo $1); le occorrenze successive sono testo comune.
  • I segnaposto annidati (${1:${2:x}}) non sono supportati; il testo interno viene preso alla lettera.
  • $FILENAME è vuoto nei buffer non salvati.