
Di seguito trovi una guida pratica, passo‑passo, con esempi pronti da incollare, suggerimenti per testare e consigli per mantenere gli snippet organizzati.
1. Prerequisiti
-
Visual Studio Code installato su Ubuntu.
-
GNU Octave installato (opzionale per testare i comandi direttamente).
-
Estensione consigliata per sintassi Octave/MATLAB: "MATLAB" o "Octave" (verifica il nome esatto nel Marketplace).
-
Familiarità base con JSON (gli snippet di VS Code sono file JSON).
2. Dove salvare gli snippet in VS Code
-
Apri VS Code.
-
Apri la palette comandi con Ctrl+Shift+P.
-
Digita Preferences: Configure User Snippets e premi Invio.
-
Scegli New Global Snippets file per snippet disponibili in tutti i linguaggi, oppure New Snippets file for 'matlab' (o crea un file chiamato
octave.jsonse vuoi limitarli a Octave/MATLAB). -
Si aprirà un file JSON dove inserire gli snippet.
3. Struttura di uno snippet (esempio base)
Ogni snippet è un oggetto JSON con chiave il nome dello snippet e valori che definiscono prefix, body, description. Esempio minimale:
json<?XML:NAMESPACE PREFIX = "[default] http://www.w3.org/2000/svg" NS = "http://www.w3.org/2000/svg" />
{
"NomeSnippet": {
"prefix": "prefisso",
"body": [
"prima riga di codice",
"seconda riga di codice"
],
"description": "Descrizione breve dello snippet"
}
}
-
prefix: testo che digiti per attivare lo snippet.
-
body: array di stringhe (ogni elemento è una riga); puoi usare variabili e tabstop.
-
description: testo che appare nella lista di completamento.
4. Snippet utili per Octave (da incollare in octave.json o matlab.json)
Copia e incolla questi esempi nel file snippet aperto in VS Code.
4.1 Template funzione
json
{
"Octave Function Template": {
"prefix": "ofunc",
"body": [
"function ${1:out} = ${2:funName}(${3:args})",
"% ${2:funName} - ${4:Short description}",
"%",
"% Syntax:",
"% ${1:out} = ${2:funName}(${3:args})",
"%",
"% Inputs:",
"% ${3:args} - description",
"%",
"% Outputs:",
"% ${1:out} - description",
"",
" % --- body ---",
" ${0}",
"endfunction"
],
"description": "Template per creare una funzione Octave"
}
}
4.2 Blocco di test e confronto risultati
json
{
"Octave Test Block": {
"prefix": "otest",
"body": [
"%% Test ${1:TestName}",
"${2:input} = ${3:[]};",
"${4:expected} = ${5:[]};",
"${6:result} = ${7:yourFunction}(${2:input});",
"assert( max(abs(${6:result} - ${4:expected})) < ${8:1e-6} );",
"disp('Test passed');",
"${0}"
],
"description": "Blocco di test semplice per confrontare risultati numerici"
}
}
4.3 Plot standard con impostazioni
json
{
"Octave Plot Boilerplate": {
"prefix": "oplot",
"body": [
"% Plot example",
"x = linspace(${1:0}, ${2:2*pi}, ${3:200});",
"y = ${4:sin}(x);",
"figure('position',[100,100,${5:800},${6:400}]);",
"plot(x,y,'-b','LineWidth',${7:1.5});",
"title('${8:Title}');",
"xlabel('${9:x}');",
"ylabel('${10:y}');",
"grid on;",
"drawnow();",
"${0}"
],
"description": "Snippet per creare un plot con impostazioni comuni"
}
}
4.4 Ciclo for con commenti e preallocazione
json
{
"Octave For Loop Prealloc": {
"prefix": "ofor",
"body": [
"% Preallocazione",
"${1:n} = ${2:100};",
"${3:out} = zeros(${1:n},1);",
"for ${4:i} = 1:${1:n}",
" % calcolo",
" ${3:out}(${4:i}) = ${5:compute}(${4:i});",
"endfor",
"${0}"
],
"description": "For loop con preallocazione"
}
}
5. Variabili, tabstop e scelte (placeholders avanzati)
-
${1}${2}sono tabstop: premi Tab per spostarti. -
${1:default}imposta un valore di default. -
${1|opt1,opt2|}crea una scelta a discesa. -
${0}è il cursore finale.
Esempio con scelta:
json
"body": [
"graphics_toolkit(\"${1|gnuplot,qt,fltk|}\");"
]
6. Associare file .m a linguaggio Octave/MATLAB in VS Code
Se VS Code non riconosce .m come MATLAB/Octave:
-
Apri un file
.m. -
Clicca in basso a destra sull'indicazione del linguaggio (es. Plain Text).
-
Seleziona Configure File Association for '.m'... e scegli MATLAB o l’estensione Octave installata.
7. Testare gli snippet
-
Apri un file
.m. -
Digita il prefix (es.
ofunc) e premi Tab o Enter per espandere. -
Usa Tab per navigare tra i tabstop e personalizzare i valori.
-
Salva e, se vuoi, esegui lo script in Octave per verificare che tutto funzioni.
8. Organizzazione e condivisione
-
Mantieni gli snippet in un file dedicato
octave.code-snippetsooctave.json. -
Versiona il file con Git nel repository del progetto.
-
Per condividerli con il team, includi il file nel repo e istruzioni su come importarlo in VS Code (Preferences → Configure User Snippets → Import).
9. Suggerimenti pratici e best practice
-
Inizia piccolo: crea snippet per pattern ripetuti (funzioni, plot, test) e amplia gradualmente.
-
Usa descrizioni chiare per ricordare lo scopo dello snippet.
-
Evita codice troppo specifico: lascia tabstop per parametri che cambiano spesso.
-
Combina con frammenti di commento per generare header di funzione e documentazione.
-
Mantieni coerenza con lo stile del progetto (naming, commenti).
-
Backup: salva una copia degli snippet in cloud o nel repo.
10. Esempio completo di file snippet (octave.json)
Copia l’intero blocco seguente in Preferences: Configure User Snippets → New Snippets file e salvalo come octave.json:
json
{
"Octave Function Template": {
"prefix": "ofunc",
"body": [
"function ${1:out} = ${2:funName}(${3:args})",
"% ${2:funName} - ${4:Short description}",
"%",
"% Syntax:",
"% ${1:out} = ${2:funName}(${3:args})",
"%",
"% Inputs:",
"% ${3:args} - description",
"%",
"% Outputs:",
"% ${1:out} - description",
"",
" % --- body ---",
" ${0}",
"endfunction"
],
"description": "Template per creare una funzione Octave"
},
"Octave Plot Boilerplate": {
"prefix": "oplot",
"body": [
"x = linspace(${1:0}, ${2:2*pi}, ${3:200});",
"y = ${4:sin}(x);",
"figure('position',[100,100,${5:800},${6:400}]);",
"plot(x,y,'-b','LineWidth',${7:1.5});",
"title('${8:Title}');",
"xlabel('${9:x}');",
"ylabel('${10:y}');",
"grid on;",
"drawnow();",
"${0}"
],
"description": "Snippet per creare un plot con impostazioni comuni"
},
"Octave For Loop Prealloc": {
"prefix": "ofor",
"body": [
"${1:n} = ${2:100};",
"${3:out} = zeros(${1:n},1);",
"for ${4:i} = 1:${1:n}",
" ${3:out}(${4:i}) = ${5:compute}(${4:i});",
"endfor",
"${0}"
],
"description": "For loop con preallocazione"
}
}










