18 votes

vim dissimuler avec plus d'un caractère

En fait, j'aimerais afficher -> avec (il y a un espace après la flèche) dans les fichiers haskell. Mais j'ai l'impression que le mécanisme de dissimulation ne fonctionne que pour remplacer -> d'un caractère. Un effet indésirable est une indentation visuellement mauvaise.

Existe-t-il un moyen d'y parvenir ?

Gracias.

Edit : En fait, j'utilise ceci, (de haskell.vim (amélioration de la dissimulation) plugin)

syntax match hsNiceOperator "<-" conceal cchar=

21voto

superjer Points 374

Je fais exactement ce que vous voulez en C. L'astuce consiste à dissimuler chaque caractère séparément, comme suit :

syn match ArrowHead contained ">" conceal cchar=▶
syn match ArrowTail contained "-" conceal cchar=─
syn match ArrowFull "->" contains=ArrowHead,ArrowTail

Il se peut que la tête ou la queue de flèche soit associée à un plein de flèche, malheureusement. Cela est dû au fait que les règles syntaxiques existantes utilisent contains=ALLBUT,... ou quelque chose de similaire.

Pour résoudre ce problème en C, j'ai ajouté ArrowTail et ArrowHead au groupe cParenGroup, ce qui semble éviter tout problème.

syn cluster cParenGroup add=ArrowTail,ArrowHead

Vous devrez peut-être faire quelque chose de similaire pour Haskell.

Comme je n'utilise pas du tout la fonction de dissimulation par ailleurs, je dis à Vim d'aller de l'avant et de "dissimuler" les flèches TOUT le temps :

set conceallevel=1 concealcursor=nvic

BTW si vous n'aimez pas les couleurs par défaut pour les personnages cachés, vous pouvez les changer comme ceci :

hi conceal ctermfg=DarkBlue ctermbg=none guifg=DarkBlue guibg=none

5voto

Question très ancienne, mais au cas où quelqu'un d'autre essaierait de résoudre ce problème, j'ai eu du succès avec ce qui suit :

call matchadd('Conceal', '<-\&<', 10, -1, {'conceal':'←'})
call matchadd('Conceal', '<\zs-', 10, -1, {'conceal':' '})
hi Conceal        ctermbg=NONE ctermfg=red guifg=red

Le deuxième argument de matchadd est <pattern> . En regardant :help pattern nous dit qu'un pattern est un ou plusieurs branches séparées par \| et un branch est un ou plusieurs concats séparées par \& . D'après les documents : "[a branch ] correspond au dernier concat mais seulement si toutes les conditions précédentes sont remplies. concats également à la même position".

Dans le premier appel, nous spécifions donc un pattern avec une seule branche (il n'y a pas de \| ), composée de deux concats . Le premier concat correspond à la flèche complète, et le second correspond au premier caractère de la flèche. Ainsi, le dernier concat est le < qui est tout ce qui est considéré comme la correspondance pour le paramètre conceal, mais cela ne correspond que si le paramètre < apparaît dans un <- . Le deuxième appel donne un pattern avec un branch et un concat . Le modèle commence par le < mais le match est remis à zéro avec le zero-width atome \zs qui réinitialise la correspondance au caractère suivant, l'option - qui est masqué par un espace. Les hi Conceal n'est que la mise en évidence.

Dans mes tests < ne se transforme pas en y - n'est pas transformé en espace.

J'espère que cela aidera quelqu'un :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X