Múltiples métodos de plegado en vim


9

Utilizo bastante la opción de plegado de vim , y generalmente he establecido el método de plegado en sintaxis. Recientemente descubrí que es posible agregar pliegues personalizados, de modo que pueda colocar bloques enteros /*{{{*/y /*}}}*/que es muy útil para agrupar grandes secciones de un archivo fuente. Sin embargo, para usar esa función, necesito establecer el método de plegado en marcador, y pierdo el plegado de sintaxis.

¿Es posible tener dos métodos de plegado activos al mismo tiempo en vim? set foldmethod=syntax,markerNo funciona.

Respuestas:


4

No, estrictamente hablando, no es posible tener múltiples métodos de plegado activos en Vim al mismo tiempo.

Puede emular el plegado basado en marcadores si está dispuesto a aprender cómo escribir reglas de resaltado de sintaxis y piratear el archivo de resaltado para el idioma al que desea agregar la emulación de plegado de marcadores. Hacerlo tiene un par de inconvenientes:

  1. Los comandos para crear / eliminar un pliegue ("zf", "zd", etc.) que funcionan con marcadores y métodos de plegado manual no funcionarán cuando el método de plegado esté configurado en "sintaxis".

  2. Emular marcadores que "fuerzan" el nivel de plegado (por ejemplo, " {{{1" / " }}}1") en lugar de aumentar / disminuir el nivel de plegado en uno (por ejemplo, " {{{" / " }}}") es problemático; o bien debe ignorar los números de nivel de plegado por completo, o arriesgarse a interferir (y posiblemente romper) el resto de las reglas de plegado basadas en la sintaxis.

Sugiero que cuando necesites un plegado basado en marcadores, utilices ese método por completo. Puede tomar algo de tiempo y esfuerzo extra, pero si realmente necesita la flexibilidad, puede valer la pena, especialmente teniendo en cuenta las dificultades de intentar combinar los dos.


2

Estaba buscando lo mismo. Como no quiero hackear el archivo de sintaxis, tengo una asignación para alternar entre los métodos de plegado. En este momento solo cambio entre sintaxis y marcador:

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.