Metodi di piegatura multipli in vim


9

Uso parecchio l' opzione di piegatura di vim e di solito ho impostato foldmethod sulla sintassi. Recentemente ho scoperto che è possibile aggiungere pieghe personalizzate, in modo tale da poter inserire interi blocchi /*{{{*/e /*}}}*/che è molto utile per raggruppare grandi sezioni di un file sorgente. Tuttavia, per usare questa funzione, devo impostare foldmethod su marker e perdo la piega della sintassi.

È possibile avere due foldmethod attivi contemporaneamente in vim? set foldmethod=syntax,markernon funziona.

Risposte:


4

No, a rigor di termini non è possibile avere più metodi multipli attivi in ​​Vim contemporaneamente.

È possibile emulare la piegatura basata su marker se si desidera imparare a scrivere regole di evidenziazione della sintassi e hackerare il file di evidenziazione per la lingua in cui si desidera aggiungere l'emulazione di piegatura dei marker. In questo modo presenta un paio di inconvenienti:

  1. I comandi per creare / rimuovere una piega ("zf", "zd" e così via) che funzionano con i metodi di marcatura e piegatura manuale non funzioneranno quando il metodo piega è impostato su "sintassi".

  2. Emulare marcatori che "forzano" il livello di piegatura (ad es. " {{{1" / " }}}1") Invece di aumentare / diminuire il livello di piegatura di uno (ad es. " {{{" / " }}}") È problematico; o devi ignorare del tutto i numeri del livello di piegatura o cogliere la possibilità di interferire con - e possibilmente infrangere - il resto delle regole di piegatura basate sulla sintassi.

Suggerisco che quando trovi che hai bisogno di una piegatura basata su marker, usi completamente quel metodo. Può richiedere un po 'più di tempo e fatica, ma se hai davvero bisogno della flessibilità, può valerne la pena, soprattutto considerando le difficoltà nel provare a combinare i due.


2

Stavo cercando la stessa cosa. Dato che non voglio hackerare il file di sintassi, ho invece una mappatura per passare da un metodo a un altro. In questo momento cambio solo tra sintassi e marker:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.