¿Cómo puedo configurar foldlevelstart en vim para que simplemente no doble nada al principio, permitiendo que zr funcione de inmediato?


8

En vim, normalmente puse foldmethoda indentla mayoría de los tipos de archivo. En general, me gusta que los archivos se abran con todos los pliegues abiertos. Sin embargo, es útil comenzar a usar inmediatamente zmpara comenzar a cerrar pliegues a nivel mundial en todo el archivo, un nivel a la vez, lo que me permite ver la estructura general del archivo sin que se interpongan detalles.

La única solución general que he encontrado es establecer foldlevelstartun número muy alto, por ejemplo, 99, para asegurarme de que todos los archivos (teniendo en cuenta que los diferentes archivos tendrán diferentes niveles de sangría máxima) comiencen a desplegarse por completo. Sin embargo, tendría que usarlo zmrepetidamente para reducir foldlevelel nivel de plegado máximo del archivo, normalmente mucho menos de 99, lo cual es engorroso y poco práctico. Podría configurarlo foldlevelmanualmente usando la línea de comando vim, pero aún necesitaría saber la sangría máxima en el archivo.

¿Hay alguna manera práctica de abrir un archivo con un valor foldlevelestablecido exactamente uno más que el nivel máximo de sangría / pliegue actual en el archivo?

Por ejemplo, dado el siguiente archivo:

a
  b
    c
      d1
      d2
    e
      f1
      f2

La primera pulsación de tecla zmmostraría esto:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(Tenga en cuenta, sin embargo, que debería funcionar para el caso general donde la sangría máxima inicial del archivo podría ser cualquier valor).


1
Estás confundiendo zrcon zm; este último reduce el nivel de plegado.
Ingo Karkat

@IngoKarkat, tienes razón, lo estoy. Perdón por la confusión: siempre encuentro esos combos de teclas contrarios a la intuición. He arreglado mi pregunta.
Andrew Ferrier

"Siempre encuentro esas combinaciones de teclas contra-intuitivas". Se supone que significa zm= doblar más (restar pliegue) y zr= doblar menos (agregar pliegue)
wisbucky

Respuestas:


9

Esto encuentra el nivel de plegado más alto en el archivo actual:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

Para configurar esto automáticamente, puede usar un :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

1
Ingo, perfecto, eso es exactamente lo que estaba buscando. Gracias. La vergüenza foldlevelstartno tiene una opción como esta.
Andrew Ferrier

Esto no parece funcionar en Cygwin Vim. Mi foldleveles 0 y foldlevelstartes -1 cuando inicio un archivo con esa configuración.
CMCDragonkai

0

En lugar de usar zr, use zR, que abrirá todos los pliegues. Del mismo modo, zMcerrará todos los pliegues.


Gary, gracias. Eso está cerca, pero no hace lo que describo. Me gustaría un comando que reduzca el nivel de plegado solo en uno, pero desde el nivel de plegado máximo relevante para el archivo en cuestión. Para hacer eso, necesitaría usar zM para reducir el nivel de plegado a 0, luego zr repetidamente para abrir más detalles. Estoy buscando una combinación de comando / tecla.
Andrew Ferrier

2
Puede hacerlo zR(establecer el nivel de plegado en el nivel más alto) y luego zmfuncionará. Es solo un paso extra.
wisbucky

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.