Fare set foldmethod=expre 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
>1quando 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(