Fare set foldmethod=expr
e usare 'foldexpr'
per impostare un'espressione di script vim che definirà i punti di inizio piega.
set foldmethod=expr
set foldexpr=get(split(getline(v:lnum-1)),0,'')!=get(split(getline(v:lnum)),0,'')?'>1':'='
Questo sembra più complicato di quello che è, perché non possiamo usare facilmente gli spazi in :set
, ma con gli spazi e una nuova riga o 2, sembra:
get(split(getline(v:lnum - 1)), 0, '') != get(split(getline(v:lnum)), 0, '')
\ ? '>1'
\ : '='
Panoramica
Fondamentalmente questo confronta la prima parola di ogni riga con la riga precedente. Se le parole sono differenti allora la linea è inizio della piega, >1
. Altrimenti mantiene lo stesso livello di piegatura, =
.
Gloria dei dettagli
set foldmethod=expr
per dire a Vim di usare un'espressione di script vim per determinare le pieghe
'foldexpr'
L'opzione contiene l'espressione dello script vim
- Valutare la condizione con un ternario che ritorna
>1
quando dovrebbe iniziare una piega e =
quando il livello di piega dovrebbe continuare
v:lnum
è la riga corrente su cui 'foldexpr'
è in esecuzione per aggiornare le pieghe
- Ottieni il contenuto della riga corrente (
v:lnum
) e della riga precedente ( v:lnum - 1
) tramitegetline()
- Dividi ogni riga in parole via
split()
- Utilizzare
get()
per ottenere il primo indice delle parole appena divise
- Utilizzare un valore predefinito
''
in caso di una riga vuota. per esempioget(words, 0, '')
- Confronta la prima parola della riga corrente con la prima parola della riga precedente nella porzione condizione del ternario
Nota: questo metodo potrebbe presentare alcuni problemi di prestazioni con documenti molto grandi
Per ulteriori informazioni, consultare:
:h 'foldmethod'
:h 'foldexpr'
:h getline(
:h v:lnum
:h split(
:h get(