Méthodes de pliage multiples dans vim

9

J'utilise beaucoup l' option de pliage de vim et j'ai généralement défini la méthode de pliage sur la syntaxe. Récemment, j'ai découvert qu'il est possible d'ajouter des plis personnalisés, de sorte que je puisse mettre des blocs entiers /*{{{*/et /*}}}*/ce qui est très utile pour regrouper de grandes sections d'un fichier source. Cependant, pour utiliser cette fonctionnalité, je dois définir la méthode de pliage sur marqueur et je perds la syntaxe de pliage.

Est-il possible d'avoir deux méthodes de pliage actives en même temps dans vim? set foldmethod=syntax,markerne marche pas.

Bjarke Freund-Hansen
la source

Réponses:

4

Non, à proprement parler, il n'est pas possible d'avoir plusieurs méthodes de pliage actives dans Vim en même temps.

Vous pouvez émuler un pliage basé sur des marqueurs si vous souhaitez apprendre à écrire des règles de mise en surbrillance de la syntaxe et pirater le fichier de mise en surbrillance pour la langue à laquelle vous souhaitez ajouter une émulation de pliage de marqueurs. Cela présente quelques inconvénients:

  1. Les commandes pour créer / supprimer un pli ("zf", "zd" et ainsi de suite) qui fonctionnent avec les méthodes de pliage manuel et manuel ne fonctionneront pas lorsque la méthode de pliage est définie sur "syntaxe".

  2. Émuler des marqueurs qui "forcent" le niveau de pli (par exemple " {{{1" / " }}}1") au lieu d'augmenter / diminuer le niveau de pli d'un (par exemple " {{{" / " }}}") est problématique; soit vous devez ignorer complètement les numéros de niveau de pliage, soit vous risquez d'interférer avec - et éventuellement de casser - le reste des règles de pliage basées sur la syntaxe.

Je suggère que lorsque vous trouvez que vous avez besoin d'un pliage basé sur un marqueur, vous utilisez entièrement cette méthode. Cela peut prendre du temps et des efforts supplémentaires, mais si vous avez vraiment besoin de la flexibilité, cela peut valoir la peine, surtout compte tenu des difficultés à combiner les deux.

Heptite
la source
2

Je cherchais la même chose. Comme je ne veux pas pirater le fichier de syntaxe, j'ai plutôt un mappage pour basculer entre les méthodes de pliage. Pour le moment, je ne passe que de la syntaxe au marqueur:

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
idbrii
la source