Haga set foldmethod=expr
y use 'foldexpr'
para establecer una expresión de script vim que definirá los puntos de inicio de plegado.
set foldmethod=expr
set foldexpr=get(split(getline(v:lnum-1)),0,'')!=get(split(getline(v:lnum)),0,'')?'>1':'='
Esto parece más complicado de lo que es, porque no podemos usar espacios fácilmente :set
, pero con espacios y una nueva línea o 2, se ve así:
get(split(getline(v:lnum - 1)), 0, '') != get(split(getline(v:lnum)), 0, '')
\ ? '>1'
\ : '='
Visión general
Básicamente, esto compara la primera palabra de cada línea con la línea anterior. Si las palabras son diferentes entonces la línea es empezar del pliegue, >1
. De lo contrario, se mantiene el mismo nivel pliegue, =
.
Gloria de detalles
set foldmethod=expr
decirle a Vim que use una expresión de script vim para determinar los pliegues
'foldexpr'
la opción contiene la expresión de script vim
- Evaluar la condición con un ternario que regresa
>1
cuando un pliegue debe comenzar y =
cuando el nivel del pliegue debe continuar
v:lnum
es la línea actual que se 'foldexpr'
está ejecutando para actualizar los pliegues
- Obtenga los contenidos de la línea actual (
v:lnum
) y la línea anterior ( v:lnum - 1
) a través degetline()
- Divide cada línea en palabras a través de
split()
- Use
get()
para obtener el primer índice de las palabras recién divididas
- Utilice un valor predeterminado de
''
en caso de una línea en blanco. p.ejget(words, 0, '')
- Compare la primera palabra de la línea actual con la primera palabra de la línea anterior en la porción de condición del ternario
Nota: este método puede tener algunos problemas de rendimiento con documentos muy grandes
Para más ayuda ver:
:h 'foldmethod'
:h 'foldexpr'
:h getline(
:h v:lnum
:h split(
:h get(