Surlignage vim personnalisé

12

Je suis en train d'éditer du xml en ce moment et je me suis laissé quelques commentaires sur les choses à revenir. Comme ça

<!-- Question: bla bla -->

Je suis en train de modifier avec vim en ce moment et je voudrais que vim mette en surbrillance Question maintenant afin que je puisse facilement parcourir mon code et trouver tous les endroits que je dois consulter. Je sais que je dois ajouter quelque chose dans mon vimrc mais je pense que je cherche peut-être la mauvaise chose.

Mise à jour

J'ai essayé de mettre cela dans mon .vimrcmais cela n'a eu aucun effet:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Update 2

En fait, je peux voir que ce que j'ai fait avant a eu un certain effet parce que quand je fais ça:

:hi

Il me montre toutes les choses qu'il met en évidence et l'une des entrées est:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( et le xxx est formaté correctement )

Cela m'amène à croire que je ne définis tout simplement pas correctement la Question. La question doit-elle être en ligne seule?

Mise à jour 3

Ok donc pour le post de l'utilisateur 22303 j'ai ce travail:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/

Cependant, je pense que vous n'êtes autorisé à avoir qu'une seule correspondance par fichier. Parce que quand je fais ça:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/
highlight MyRelook cterm=bold term=bold ctermbg=blue ctermfg=black
match MyRelook /Another look/

Le premier cesse de fonctionner. (Mais le second fonctionne).

sixtyfootersdude
la source

Réponses:

9

Je pense que nous vous avons fourni des réponses qui ne sont pas tout à fait correctes. Voici quelque chose à essayer que j'ai testé sur ma machine.

Tout d'abord, créez votre propre nouveau groupe de surbrillance:

:highlight MyQuestions guifg=red guibg=green

Maintenant, spécifiez que le groupe de surbrillance existera chaque fois qu'un motif est mis en correspondance:

:syntax match MyQuestions /Question/

Cela devrait commencer à montrer le surlignage du texte «Question» sur chaque ligne qui a ce texte. Pour développer pour afficher la ligne entière, vous devez modifier le texte de recherche pour que les caractères génériques correspondent à la ligne entière, quelque chose comme ceci:

:syntax match MyQuestions /.*Question.*/

user22303
la source
En fait, cela n'a fonctionné que de manière sélective ... Je soupçonne que vous n'êtes autorisé à avoir qu'un seul match à la fois voir la mise à jour # 3 ...
sixtyfootersdude
1
@sixtyfootersdude: Désolé, encore une fois, il y a eu une erreur mineure. Toutes les commandes de correspondance doivent plutôt être des commandes de "correspondance de syntaxe". Ainsi, au lieu de [: match MyQuestions /.*Question.*/], vous voudriez utiliser [: syntax match MyQuestions /.*Question.*/]. Cela vous permet d'avoir autant de correspondances différentes que vous le souhaitez. Ce sont en fait l'un des types de commandes les plus courants placés dans les fichiers de syntaxe. Mais vous pouvez les exécuter où vous le souhaitez, que ce soit en ligne de commande, vimrc ou tout autre script.
user22303
L'ajout en syntaxface de match...dans mon fichier vimrc fait que la correspondance n'a aucun effet. Est-ce là que je devrais faire ça. Le faire dans un fichier ouvert n'a également aucun effet.
sixtyfootersdude
1
@sixtyfooters: Je ne sais pas ce qui se passe pour vous, mais c'est certainement la façon de le faire. Testez en ligne de commande avant de placer dans un script (il est possible que les paramètres de syntaxe soient effacés quelque part dans d'autres scripts chargés pour votre fichier). Une fois définis, vérifiez quels groupes existent et quelle surbrillance ils ont en émettant une commande ": highlight" nue (ou en choisissant "Syntaxe", "Test de surbrillance" dans le menu gui dans gvim). N'oubliez pas que vous souhaitez d'abord utiliser la commande de surbrillance pour créer un groupe, puis utilisez «syntax match» pour définir le modèle de correspondance.
user22303
@sixtyfooters: Je suppose que vous exécutez vim dans un terminal (c'est-à-dire pas gvim) afin que la définition du terme propriétés uniquement fonctionne. Il me semble que les commandes de syntaxe sont effacées lorsqu'un nouveau fichier est chargé et qu'un fichier de syntaxe associé est en cours d'exécution et efface toutes les commandes de syntaxe précédentes. Donc, juste pour vérifier, lorsque vous utilisez la ligne de commande, saisissez-vous ces commandes à chaque fois que vous chargez un fichier? Je pense que vous pouvez essayer de tester avec du texte dans un nouveau tampon qui n'est même pas enregistré et qui n'a même pas encore de nom de fichier attribué.
user22303
5

Le fichier que vous recherchez est un fichier de "syntaxe". Essayez de regarder dans /usr/local/share/vim/syntax/ou /usr/share/vim/syntax/. Le fichier que vous souhaitez est xml.vim.

La chose la plus simple à faire est de trouver la ligne qui a

syn keyword xmlTodo         contained TODO FIXME XXX

et changez-le en:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Cela ajoutera la surbrillance «Todo» à tout commentaire contenant le texte Question.

Si vous comptez l'utiliser pour (jamais), il serait préférable de copier le xml.vim dans votre section locale ~/.vim/syntaxafin que les modifications apportées à vim n'écrasent pas votre fichier de syntaxe personnalisé.

Mise à jour

Si vous voulez une capacité similaire (sortof) dans n'importe quel fichier, j'utiliserais la commande 'goto'. J'admets que c'est comme hlsearch, ce qui, selon vous, vous agace.

Lors de la modification, lorsque le curseur est sur un mot, tapez gdpour rechercher à partir du point actuel dans le fichier ou gDpour rechercher depuis le début. Chaque mot de votre fichier qui correspond au mot actuel est mis en surbrillance. Vous pouvez taper npour passer à l'instance suivante de ce mot.

J'ai tendance à le faire, car vous obtenez la mise en évidence et la navigation avec une frappe minimale. Vous désactivez la surbrillance de la manière habituelle::noh[lsearch]

DaveParillo
la source
Hou la la! Cela ressemble à ce que je veux faire. Je n'ai actuellement pas de ~/.vim/ folder. If I created it and create the file syntaxe. Dois-je le référencer quelque part (peut-être dedans .vimrc?) pour dire à Vim de l'utiliser?
sixtyfootersdude
1
Nan. Vim le recherche automatiquement (et quelques autres répertoires - par exemple: plugins, couleur, compilateur) et si un fichier de syntaxe existe dans votre zone d'accueil, il a priorité sur le système par défaut.
DaveParillo
1
Aussi, juste pour être clair, vous voulez créer un répertoire syntax et y mettre un fichier nomméxml.vim
DaveParillo
Dois-je mettre mon .vimrc dans mon répertoire .vim?
sixtyfootersdude
1
les fichiers de syntaxe vont dans votre répertoire .vim. La coloration syntaxique est conçue pour être spécifique à la langue. Si vous voulez une capacité similaire (sortof) dans n'importe quel fichier, j'utiliserais la commande 'goto'. Je vais l'ajouter à ma réponse.
DaveParillo
2

Vous pourriez simplement faire

:set hlsearch

Et puis recherchez Question

Dominik
la source
C'est ce que j'ai fait mais hlsearch m'énerve. +1, merci pour la suggestion.
sixtyfootersdude
2

Vous avez plusieurs options.
- un, comme Dominik l'a mentionné ... vous pouvez rechercher ceux-ci un par un (pas si pratique)
- deux, vous pouvez faire ": g / <- Question" pour obtenir une "liste" de tous (un peu mieux) , donne une vue d'ensemble)
- troisièmement, vous pouvez créer un groupe de surbrillance si vous n'utilisez que ce genre de commentaires dans des fichiers xml (je ne sais pas à quoi ressemble xml, donc je ne sais pas s'il y en a d'autres types de commentaires). Ce serait bien si vous l'installiez dans vimrc, car lorsque vous actualisez vim avec une version plus récente, votre fichier xlm.vim disparaît.

Tour
la source
+1 J'aime la :g/suggestion, mais il peut être difficile de l'appliquer si "Question" ne suit pas immédiatement la balise de commentaire.
DaveParillo
@DaveParillo - ah, oui. eh bien, comme je l'ai dit, je ne sais rien du xml donc j'ai supposé qu'il en était toujours ainsi.
Tour
Comment puis-je configurer un groupe de surbrillance?
sixtyfootersdude
1
@sixtyfootersdude - voir ": help e410".
Rook
@Idigas: merci pour la référence. J'ai regardé mais je n'ai toujours pas pu résoudre mon problème. J'ai ajouté une mise à jour dans la question. Merci.
sixtyfootersdude
1

Vous n'avez pas nécessairement besoin de mettre la commande dans votre vimrc. Vous pouvez toujours simplement l'entrer sur la ligne de commande, puis l'effacer lorsque vous ne souhaitez plus la mise en évidence. Les commandes seraient quelque chose comme ceci:

: salut Question guifg = rouge guibg = bleu gui = bold

Dans gvim (c'est-à-dire, vim avec un gui) qui définira les paramètres de premier plan (guifg), d'arrière-plan et de caractère général.

si vous voulez vous débarrasser de cette mise en évidence, procédez comme suit:

: salut Question claire

En utilisant vim à l'intérieur d'un terminal, vous pouvez modifier pour utiliser cette commande:

: salut Question ctermfg = rouge ctermbg = bleu term = bold

Vous pouvez bien sûr mettre n'importe lequel de ces éléments dans votre vimrc, et vous pouvez également combiner les indicateurs gui et term en une seule commande hi.


[ci-dessous ajouté après avoir lu la réponse d'une autre affiche]

Désolé, je supposais que la syntaxe de vos lignes de questions correspondait déjà aux paramètres de votre fichier de syntaxe pour la balise de mise en surbrillance «Question» intégrée de Vim. Regardez simplement l'autre réponse qui mentionne le fichier de syntaxe xml pour vim, puis vous pouvez émettre des commandes ci-dessus en utilisant le groupe de surbrillance ToDo au lieu de Question.

user22303
la source
Testé: salut Question ctermfg = rouge ctermbg = terme bleu = gras mais n'a eu aucun effet.
sixtyfootersdude
Désolé, la commande: hi a simplement établi comment le groupe de questions serait mis en surbrillance. Vous devez maintenant spécifier quelles zones du document font partie du groupe de questions. Vous pouvez le faire avec une commande match:: match Question / [modèle de recherche] / ou, dans votre cas:: match Question / Question /
user22303
0

Je suis en retard à la fête mais j'utilise TODOet FIXMEpour exactement cette situation.

La plupart, sinon la totalité, des thèmes de couleurs mettront en surbrillance le TODOdans l'exemple suivant avec une combinaison de couleur d'arrière-plan, de soulignement et d'italique:

<tree>
  <!--TODO : do I have to add a trunk tag ?-->
  <branch>
    <leaf>caterpillar</leaf>
    <leaf>caterpillar</leaf>
  </branch>
</tree>

Il ne correspond pas vraiment sémantiquement mais il fonctionne très bien d'un point de vue purement fonctionnel.

romainl
la source