L'evidenziazione della sintassi è controllata dal file tmLanguage. In ST3 questi sono contenuti nei file .cache.
Quindi, attenersi alla seguente procedura.
- Aperte Strumenti -> Comando di pallets e utilizzando
Package Manager
installare PackageResourceViewer
- Nel Pallet comando SELECT
PackageResourceViewer: Open Resource
- Nel pannello presentato scegliere
C++
- Nel pannello presentato scegliere
C++.tmLanguage
Ora hai il file di definizione della lingua visualizzato per te.
Dai un'occhiata alla forma di come sono definite le parti di una lingua. Se cerchiamo class
troviamo quanto segue come una delle partite:
<dict>
<key>match</key>
<string>\b(class|struct)\s+([_A-Za-z][_A-Za-z0-9]*\b);</string>
<key>name</key>
<string>meta.class-struct-block.c++</string>
<key>captures</key>
<dict>
. . .
. . .
</dict>
ho scelto che uno perché si tratta di un po 'di expresssion corrispondenza regolare (regex) e questo è il suggerimento di fare ciò che si vuole fare.
Poiché la ST ha una struttura aperta e piacevole, chiunque conosca un po 'di programmazione può aggiungere le proprie definizioni di componente linguistico a questi file .tmLanguage
. Questa flessibilità è parte del motivo per cui ST è la mia scelta.
Quindi vediamo come farlo.
La prima cosa è salvare il file C++.tmLanguage
che abbiamo aperto nell'editor nella nostra cartella User
.
Lo facciamo sia per mantenere l'originale come un rollback se le cose vanno male e perché significa che la nostra versione in User
sarà non ottenere sovrascritto ogni volta che gli aggiornamenti ST. Il modo in cui ST carica i file significa che i duplicati nella cartella User
sovrascrivono i valori nella posizione predefinita in modo che le nostre versioni User
abbiano la precedenza su ciò che è in esecuzione quando utilizziamo ST. Ehi ehi?
Così ora abbiamo la nostra versione del file C++.tmLanguage
giochiamo con esso.
Trova una definizione che assomigli un po 'a quello che vogliamo fare e duplicala.
ho intenzione di copiare questo:
<dict>
<key>match</key>
<string>\b(class|wchar_t|nullptr_t)\b</string>
<key>name</key>
<string>storage.type.c++</string>
</dict>
La prima cosa che ho intenzione di fare è decidere quello che sto per citare il mio nuovo componente lingua.
Potrei semplicemente dargli il nome di un componente linguistico esistente che ha la colorazione che voglio avere. Questo ha il vantaggio che se quel nome è già presente negli schemi di colori esistenti otterrò l'evidenziazione gratuitamente. Sentiti libero di fare questa scelta.
Ma per esplorare più del sistema, ho intenzione di inventare il mio nome e portarlo a me stesso. Quindi lo chiamerò duncan.name.class
. Puoi usare qualsiasi nome che ti piace che non sia in conflitto con un nome esistente.
Così farò che il cambiamento nella duplicare:
<dict>
<key>match</key>
<string>\b(class|wchar_t|nullptr_t)\b</string>
<key>name</key>
<string>duncan.name.class</string>
</dict>
Ora ho bisogno di scrivere l'espressione regolare per identificare il mio nuovo componente lingua. Questo è abbastanza facile dal momento che assumerò che stiamo seguendo la pratica abbastanza comune di nominare le nostre classi con i Caps principali e di non utilizzarli per altri componenti linguistici, quindi la mia regex ha solo bisogno di trovare qualsiasi stringa che inizi con una ALFA UPPERCASE, che è facilmente definito come [A-Z]
seguito da qualsiasi carattere alfanumerico/s. Si noti che questo preclude la punteggiatura (come il carattere di sottolineatura _
), quindi se si utilizzano quelli nei nomi delle classi sarà necessario espandere la regex per includere tali caratteri.
Quindi cerchiamo di cambiare la condizione partita di utilizzare tale espressione regolare:
<dict>
<key>match</key>
<string>\b([A-Z][a-zA-Z0-9]+)\b</string>
<key>name</key>
<string>duncan.name.class</string>
</dict>
ora ho un nuovo componente di lingua ho bisogno di dirvi il mio tema come gestirlo. Sto andando a lavorare sul tema Amy
per questo esempio.
Ma torniamo al sempre disponibile PackageResourceViewer
come questo:
- Nel Pallet comando SELECT
PackageResourceViewer: Open Resource
- Nel pannello presentato scegliere
Color Scheme - Default
- Nel pannello presentato scelgono
Amy.tmTheme
Ora hai il file del tema visualizzato per te.
Ancora una volta voglio salvare la mia copia nella cartella User
e quindi duplicare un esempio esistente. Ho intenzione di duplicare String
ma tutto ciò che afferra la tua fantasia va bene.
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
Ora cambierò il duplicato di String
a fare da colorare per il mio nuovo componente lingua.
<dict>
<key>name</key>
<string>Class Names :: Duncan</string>
<key>scope</key>
<string>duncan.name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
<key>background</key>
<string>#FFFFFF</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
Spero che tu riconosca i nomi che sto utilizzando dal lavoro svolto in precedenza?
Ho scelto un set leggermente pazzo di preferenze di evidenziazione della sintassi solo per mostrare alcune delle opzioni disponibili.Rilassati giocando con le idee qui.
Tutto ciò ha senso?
Con queste idee è possibile correggere qualsiasi problema di evidenziazione della sintassi che si ha in ST3 affinché funzioni esattamente come desiderato. Forse la mia regex di sopra non è troppo grande? Non ci ho pensato molto, quindi potresti scoprire che devi lavorare di più per ottenere quello che vuoi.
Fammi sapere se un po 'di questo non ha senso e cercherò di fare meglio.
Puoi farlo in Sublime Text? Se potessi, disinstallerei ogni IDE sul mio computer ... –