Come fare VS Code per trattare altre estensioni di file come una determinata lingua?


333

Oppure c'è un modo per cambiare la lingua del file corrente per utilizzare la funzione di evidenziazione della sintassi?

Ad esempio, *.jsxutilizza effettivamente JavaScript ma VS Code non lo riconosce.

Risposte:


501

In Visual Studio Code , puoi aggiungere associazioni di file persistenti per l'evidenziazione della lingua al tuo settings.jsonfile in questo modo:

// Place your settings in this file to overwrite the default settings
{
  "some_setting": custom_value,
  ...

  "files.associations": {
    "*.thor": "ruby",
    "*.jsx": "javascript",
    "Jenkinsfile*": "groovy"
  }
}

Puoi usare Ctrl+ Shift+ pe quindi digitare settings JSON. Scegli Preferenze: Apri Impostazioni (JSON) per aprire il tuo settings.json.

La Files: Associationsfunzionalità è stata introdotta per la prima volta in Visual Studio Code versione 1.0 (marzo 2016). Controllare i modelli di caratteri jolly disponibili nelle note di rilascio e le stringhe di lingua note nella documentazione.


6
Il valore per l'associazione deve essere l'ID della lingua / plugin, non il nome. Ad esempio il plug-in VBScript che ho installato, l'ID è vbs. "* .vms": "vbs" ottiene l'estensione personalizzata da associare correttamente.
Matt Merrill

Ho appena affrontato un problema simile. Se l'aggiunta di un'associazione di file non sembra funzionare, assicurati di non avere un .editorconfigfile vicino o di allineare le configurazioni tra VSCode e .editorconfig, quest'ultima avrà la precedenza
RecuencoJones,

È inoltre possibile inserire queste impostazioni in un ${projectdir}/.vscode/settings.jsonfile specifico del progetto .
Jason

108

Tieni premuto Ctrl + Maiusc + P (o cmd su Mac), seleziona "Cambia modalità lingua" e il gioco è fatto.

Ma non riesco ancora a trovare un modo per far riconoscere i file VS Code con estensione specifica in una certa lingua.


3
Sembra che ci sia un collegamento direttamente a Change Language Mode; Alt+K, M
Stafford Williams,

Cmd+K, Mper Mac.
GreeKatrina,

Questo è molto possibile. Vedere la mia risposta qui sotto: stackoverflow.com/a/51228725/3307796
JoelAZ

69

Il modo più semplice che ho trovato per un'associazione globale è semplicemente ctrl + km (o ctrl + shift + p e digitare "cambia modalità lingua") con un file del tipo che stai associando aperto.

Nelle prime selezioni sarà "Configura associazione file per 'x'" (qualunque sia il tipo di file - vedi immagine allegata) La selezione in questo modo rende permanente l'associazione del tipo di file

inserisci qui la descrizione dell'immagine

Questo potrebbe essere cambiato (probabilmente lo ha fatto) rispetto alla domanda originale e alla risposta accettata (e non so quando sia cambiata) ma è molto più semplice dei passaggi di modifica manuale nelle risposte accettate e in alcune delle altre, ed evita totalmente di avere confondere con gli ID che potrebbero non essere ovvi.


2
Grazie - ha funzionato per me. Durante la modifica manuale del settings.jsonfile non era chiaro quale fosse l'ID estensione, ma questo metodo lo ha ordinato!
ccbunney,

1
@Ccbunney è il benvenuto, felice che sia d'aiuto. Era esattamente lo stesso problema che avevo - e non ho mai capito l'ID estensione di cui avevo bisogno, lol. Ad ogni modo, sono stato davvero contento di trovare questa soluzione per me stesso ed è bello che aiuti altri ppl! : D
JoelAZ,

33

per esempio:

// .vscode/settings.json in workspace

{
  "files.associations": {
    "*Container.js": "javascriptreact",
    "**/components/*/*.js": "javascriptreact",
    "**/config/routes.js": "javascriptreact"
  }
}

1
Bello. Ciò è utile se si dispone della stessa estensione, ma di parser di lingua diversi in base al percorso. Ad esempio puoi avere yml per gestire le pipeline di Concourse in una cartella e i file Ansible in un'altra.
Christian Maslen,

Voterei questo due volte se potessi. Ho provato a mantenere la sintassi dei miei layout e parziali Nanoc con un'estensione .html, questo ha risolto il problema: "**/layouts/**/*.html": "erb"- vale la pena notare che il menu a discesa "modalità lingua" VSCode mostra il nome effettivo dell'evidenziatore della sintassi tra parentesi, ad esempioRuby ERB (erb)
Dave Everitt,


12

Questo, ad esempio, farà sì che i file finiscano .variablese .overridesvengano trattati come qualsiasi altro file MENO. In termini di colorazione del codice, in termini di formattazione (automatica). Definisci le impostazioni dell'utente o del progetto, come preferisci.

(L'interfaccia utente semantica usa queste strane estensioni, nel caso ti chiedessi)



8

Seguire i passaggi su https://code.visualstudio.com/docs/customization/colorizer#_common-questions ha funzionato bene per me:

Per estendere un colorizer esistente, creare un semplice package.json in una nuova cartella in .vscode / extensions e fornire l'attributo extensionDependencies specificando la personalizzazione a cui si desidera aggiungere. Nell'esempio seguente, un'estensione .mmd viene aggiunta al colorizer markdown. Si noti che non solo il nome extensionDependency deve corrispondere alla personalizzazione, ma anche l'id della lingua deve corrispondere all'ID della lingua del colorizer che si sta estendendo.

{
    "name": "MyMarkdown",
    "version": "0.0.1",
    "engines": {
        "vscode": "0.10.x"
    },
    "publisher": "none",
    "extensionDependencies": [
        "markdown"
    ],
    "contributes": {
        "languages": [{
            "id": "markdown",
            "aliases": ["mmd"],
            "extensions": [".mmd"]
        }]
    }
}

5

Ho seguito un approccio diverso per risolvere praticamente lo stesso problema, nel mio caso, ho creato una nuova estensione che aggiunge il supporto per l'evidenziazione della sintassi PHP per file specifici di Drupal (come .module e .inc): https: // github. com / mastazi / VS-code-drupal

Come puoi vedere nel codice, ho creato una nuova estensione anziché modificare l'estensione PHP esistente. Ovviamente dichiaro una dipendenza dall'estensione PHP nell'estensione Drupal.

Il vantaggio di farlo in questo modo è che se c'è un aggiornamento sull'estensione PHP, il mio supporto personalizzato per Drupal non si perde nel processo di aggiornamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.