Come posso impostare foldlevelstart in vim per non piegare nulla inizialmente, consentendo comunque a zr di funzionare immediatamente?


8

In realtà, in genere ho impostato foldmethodsu indentper la maggior parte dei tipi di file. In generale, mi piace aprire i file con tutte le pieghe aperte. Tuttavia, è utile iniziare immediatamente a utilizzare zmper iniziare a chiudere le pieghe a livello globale attraverso il file, un livello alla volta, permettendomi di vedere la struttura generale del file senza che i dettagli si frappongano.

L'unica soluzione generale che ho trovato è quella di impostare foldlevelstartun numero molto alto, ad esempio 99, per assicurarsi che tutti i file (tenendo presente che file diversi avranno livelli diversi di rientro massimo) vengano completamente aperti. Tuttavia, dovrei usare zmripetutamente per ridurre foldlevelal massimo il livello di piegatura del file, normalmente molto meno di 99, che è ingombrante e poco pratico. Potrei impostare foldlevelmanualmente usando la riga di comando di vim, ma avrei comunque bisogno di conoscere il rientro massimo nel file.

Esiste un modo pratico per aprire un file con foldlevelesattamente 1 in più rispetto al livello di rientro / piegatura massimo corrente nel file stesso?

Ad esempio, dato il seguente file:

a
  b
    c
      d1
      d2
    e
      f1
      f2

Il primo tasto premuto di zmmostra questo:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(Si noti, tuttavia, che dovrebbe funzionare per il caso generale in cui il rientro massimo iniziale del file potrebbe essere qualsiasi valore).


1
Ti stai confondendo zrcon zm; quest'ultimo riduce il livello di piegatura.
Ingo Karkat,

@IngoKarkat, hai ragione, lo sono. Scusate la confusione: trovo sempre queste combo chiave contro intuitive. Ho risolto la mia domanda.
Andrew Ferrier,

"Trovo sempre quelle combo chiave contro-intuitive." Dovrebbe significare zm= fold more (sottrarre foldlevel) e zr= fold less (aggiungere foldlevel)
wisbucky

Risposte:


9

Questo trova il livello più alto nel file corrente:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

Per impostarlo automaticamente, puoi usare un :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

1
Ingo, perfetto, è esattamente quello che stavo cercando. Grazie. La vergogna foldlevelstartnon ha un'opzione come questa.
Andrew Ferrier,

Questo non sembra funzionare su Cygwin Vim. Mio foldlevelè 0 ed foldlevelstartè -1 quando avvio un file con quelle impostazioni.
CMCDragonkai,

0

Invece di usare zr, usa zR, che aprirà tutte le pieghe. Allo stesso modo, zMchiuderà tutte le pieghe.


Gary, grazie. È vicino, ma non fa quello che descrivo. Vorrei un comando che riduca il livello di piegatura solo di uno, ma dal livello di piega massimo relativo al file in questione. Per fare ciò, dovrei usare zM per ridurre il livello di piegatura a 0, quindi zr ripetutamente per aprire più dettagli. Sto cercando una combinazione comando / tasto.
Andrew Ferrier,

2
Puoi farlo zR(impostare il livello superiore al livello più alto), quindi zmfunzionerà. È solo un passo in più.
Wisbucky,

0

L'opzione set nofoldenableti consente di iniziare il file con tutte le pieghe aperte


Questa non è la domanda che ho posto. Voglio che la piegatura sia abilitata.
Andrew Ferrier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.