À quoi appartiennent les règles de surbrillance personnalisées?

11

Parfois, je veux remplacer la syntaxe par défaut en mettant en évidence les couleurs et les styles avec mes propres préférences.

J'imagine que la façon la plus appropriée de le faire serait de créer mon propre schéma de couleurs. Cependant, j'ai quelques questions.

  1. Si je veux définir une surbrillance pour un groupe de syntaxe spécifique dans une langue spécifique, cela appartient-il à mon schéma de couleurs, ou serait-il préférable de le placer dans after/syntax/[filetype].vim?

    highlight jsAssignExpIdent cterm=bold gui=bold
    

    Il semble un peu étrange de placer des règles obscures spécifiques à la langue dans le schéma de couleurs, car elles seront chargées quelle que soit la langue sur laquelle je travaille, mais il semble encore pire de placer des règles de surbrillance dans le fichier de syntaxe.

  2. Parfois, je crée de nouvelles règles de syntaxe pour une langue spécifique, dans after/syntax/[filetype].vim. Dans le cas où d'autres utilisateurs souhaiteraient utiliser ces extensions, serait-il approprié pour moi de fournir des règles de surbrillance par défaut qui sont liées à des groupes de surbrillance par défaut communs? Si un autre utilisateur souhaite remplacer cette couleur de surbrillance, comment doit-il procéder?

    ::::: after/syntax/asm.vim :::::
    
    syn match asmHexNumber /\(0x\|\$\)[0-9A-Fa-f]\+/
    highlight default link asmHexNumber Number
    
joeytwiddle
la source

Réponses:

9

Première question

Les définitions de surbrillance appartiennent à votre schéma de couleurs. Le fait qu'ils soient chargés pour chaque tampon, quelle que soit leur langue, ne devrait pas du tout être un problème.

Si vous ne souhaitez pas modifier votre schéma de couleurs, vous pouvez placer ces définitions de surbrillance dans plugin/myhighlights.vim:

function! MyHighlights()
    highlight ...
    highlight ...
endfunction

augroup MyHighlights
    autocmd!
    autocmd ColorScheme * call MyHighlights()
augroup END

Deuxième question

Votre exemple montre exactement comment faire et comment fonctionne chaque script de syntaxe. Cette méthode permet au développeur du plugin de définir un défaut sain sans forcer des couleurs spécifiques dans la gorge de leur utilisateur.

romainl
la source
Merçi pour la confirmation. Mais je crains que si je mets des highlight link ...commandes dans un fichier de syntaxe, celles-ci écraseront les paramètres du schéma de couleurs à chaque fois qu'un fichier avec ce type de fichier est chargé. Dois-je peut-être le faire seulementhighlight link ... après avoir vérifié qu'aucune règle de surbrillance n'existe pour ce nom?
joeytwiddle
Ah, je n'ai pas à m'inquiéter. Les documents Vim disent: s'il existe déjà des paramètres de surbrillance pour le {from-group}, le lien n'est pas créé, sauf si le '!' est donnée. Pour une commande ": highlight link" dans un fichier source, vous ne recevez pas de message d'erreur. Cela peut être utilisé pour ignorer les liens pour les groupes qui ont déjà des paramètres.
joeytwiddle
Mais pour les personnes qui peaufinent leurs schémas de couleurs, un highlight linkdans le schéma de couleurs pourrait être remplacé ultérieurement par un highlight linkdans un fichier de syntaxe. Pour éviter cela, des arguments réels (ctermbg, guifg, ...) peuvent être utilisés à la place d'un lien.
joeytwiddle
L'utilisateur doit avoir le dernier mot sur les couleurs utilisées pour un groupe de surbrillance donné. À cet effet, il n'est pas rare de voir des définitions de surbrillance spécifiques à la langue dans les couleurs. Vous ne devez l'utiliser que highlight link ...dans votre script de syntaxe et laisser vos utilisateurs le remplacer s'ils le souhaitent.
romainl
Ma préoccupation était que si les utilisateurs utilisent highlight link ...dans leur schéma de couleurs, le fichier de syntaxe pourrait le réinitialiser plus tard avec le sien highlight link .... Je vois maintenant que les bons fichiers de syntaxe évitent cela en utilisant highlight default link .... Cela devrait probablement être une correction de la asmHexNumberrègle de ma question.
joeytwiddle