-->

Come creare snippet personalizzati per Octave in Visual Studio Code su Ubuntu

Octave installation and Running a Sample Program

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
  1. Apri VS Code.

  2. Apri la palette comandi con Ctrl+Shift+P.

  3. Digita Preferences: Configure User Snippets e premi Invio.

  4. Scegli New Global Snippets file per snippet disponibili in tutti i linguaggi, oppure New Snippets file for 'matlab' (o crea un file chiamato octave.json se vuoi limitarli a Octave/MATLAB).

  5. 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:

  1. Apri un file .m.

  2. Clicca in basso a destra sull'indicazione del linguaggio (es. Plain Text).

  3. 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-snippets o octave.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"
  }
}

Nessun commento:

Posta un commento

Random Posts

I miei preferiti in Instagram

Archivio