Perché la creazione di una nuova piegatura a volte causa la piegatura dell'intero file?
A volte quando creo una nuova piega in vim, piega l'intero file. Come mai?
( foldmethod=manual
)
per esempio,
zi
(tutte le pieghe ora sono aperte)zi
(tutte le pieghe ora sono chiuse)- le righe 1-309 sono piegate chiuse e le righe 617-662 sono piegate chiuse (il file ha 662 righe)
- il mio cursore è sulla riga 377
- Faccio
zfG
piegare tutte le righe dalla riga 377 alla fine del file
Previsto : le righe da 377 fino alla fine del file sono chiuse e le righe 310-366 sono visibili
Effettivo : tutte le righe nel file sono chiuse
Soluzione alternativa:
zD
(elimina tutte le pieghe):1,309fold
(piega 1-309):377,$fold
(piega 377-eof)
Le mie impostazioni piega*:
foldclose=
foldcolumn=0
foldenable
foldexpr=0
foldignore=#
foldlevel=0
foldlevelstart=-1
foldmarker={{{,}}}
foldmethod=manual
foldminlines=1
foldnestmax=20
foldopen=block,hor,mark,percent,quickfix,tag,undo
foldtext=foldtext()
Risposte
Questo comportamento si verificherà se la riga 377 fa parte di una piega che inizia nella parte superiore del file e quella piega che è attualmente aperta .
In tal caso, la nuova piega che Vim creerà inizierà effettivamente alla riga 1 (non alla riga 377) e Vim chiuderà la nuova piega, piegando effettivamente l'intero file.
Puoi riprodurre questo comportamento con:
zE
(elimina tutte le pieghe.):1,309fold
(piega 1-309, prima piega iniziale che hai descritto.):617,$fold
(piega 617-eof, seconda piega iniziale che hai descritto.):1,400fold
(una piega che inizia dall'alto e include la riga 377.)zo
(apri quest'ultima piega!)377G
(vai alla riga 377.)zfG
(piega fino alla fine, ma in realtà piega 1-eof!)
È possibile che tu non stia aprendo quella piega in modo esplicito, ma attraverso una delle azioni in 'foldopen'
, come seguire un tag o andare a un segno. Anche un movimento orizzontale (come 377G0
) attiverà l'apertura di quella piega.
Se desideri vedere visivamente le pieghe, puoi utilizzare questo comando per aggiungere il livello di piegatura all'inizio di ogni riga:
:%s/^/\=foldlevel('.')."\t"/
(Nota che questo modificherà il tuo buffer, ma dovrebbe essere facile ripristinarlo con un altro :%s
comando. Anche questo andrà fuori sincrono mentre crei o elimini le piegature, dovresti anche essere in grado di aggiornare il livello di piegatura per riga dopo tale operazione con un :%s
comando simile .)
Hai anche detto che il zi
comando chiuderebbe tutte le pieghe (quando si abilita la piegatura), ma non è molto preciso ... Vim terrà traccia delle pieghe manualmente chiuse e aperte e conserverà quelle scelte quando si passa 'foldenable'
a zi
.
Il comando che chiuderà tutte le pieghe è in realtà zM.