¿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).

Andrew Ferrier
fuente
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)'))
Ingo Karkat
fuente
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.

garyjohn
fuente
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
0

La opción le set nofoldenablepermite comenzar el archivo con todos los pliegues abiertos

HarshaNadimpalli
fuente
Esa no es la pregunta que hice. Quiero plegado habilitado.
Andrew Ferrier