Mehrere Faltmethoden in vim


9

Ich benutze die Faltoption von vim ziemlich oft und habe normalerweise die Faltmethode auf Syntax gesetzt. Kürzlich entdeckte ich , dass es möglich ist , individuelle Falten zu addieren, so dass ich in ganzen Blöcken setzen können /*{{{*/und /*}}}*/das ist sehr nützlich für die Gruppierung große Teile einer Quelldatei zusammen. Um diese Funktion nutzen zu können, muss ich jedoch foldfethod auf marker setzen und die Syntaxfaltung verlieren.

Ist es möglich, zwei aktive Faltmethoden gleichzeitig in vim zu haben? set foldmethod=syntax,markerfunktioniert nicht.

Antworten:


4

Nein, genau genommen ist es nicht möglich, mehrere Fold-Methoden gleichzeitig in Vim zu aktivieren.

Sie können markergestütztes Falten emulieren, wenn Sie lernen möchten, wie Syntaxhervorhebungsregeln geschrieben werden, und die Hervorhebungsdatei für die Sprache hacken, zu der Sie die Markierungsfaltungsemulation hinzufügen möchten. Dies hat einige Nachteile:

  1. Die Befehle zum Erstellen / Entfernen einer Falte ("zf", "zd" usw.), die mit Marker- und manuellen Falzmethoden arbeiten, funktionieren nicht, wenn die Falzmethode auf "Syntax" eingestellt ist.

  2. Das Emulieren von Markern, die die Falzstufe "erzwingen" (z. B. " {{{1" / " }}}1"), anstatt die Falzstufe um eins zu erhöhen / zu verringern (z. B. " {{{" / " }}}"), ist problematisch. Entweder müssen Sie die Zahlen der Falzstufe vollständig ignorieren oder Sie müssen das Risiko eingehen, dass Sie den Rest der syntaxbasierten Faltregeln stören - und möglicherweise brechen.

Ich schlage vor, dass Sie diese Methode vollständig anwenden, wenn Sie feststellen, dass Sie eine markergestützte Faltung benötigen. Es kann einige zusätzliche Zeit und Mühe kosten, aber wenn Sie wirklich die Flexibilität benötigen, kann es sich lohnen, insbesondere angesichts der Schwierigkeiten, beide zu kombinieren.


2

Ich habe das Gleiche gesucht. Da ich die Syntaxdatei nicht hacken möchte, habe ich stattdessen eine Zuordnung zum Umschalten zwischen Foldmethods. Im Moment wechsle ich nur zwischen Syntax und 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.