2010-12-30 8 views
30

Inizialmente, utilizzo il set foldmethod = marker e sposta il cursore su {di una funzione, usa lo zf% per piegare la funzione corrente. Ma ci sono molte funzioni in questo file. Come posso piegare tutte le funzioni in questo file? E non voglio piegare {} nelle funzioni.Come posso piegare automaticamente tutte le funzioni in un file con vim?

+4

Le distribuzioni vim di FYI vengono di solito fornite con la guida incorporata. Se digiti ': help fold' puoi vedere tutte le cose relative alle pieghe. –

+1

Dovrai aggiungere la lingua che ti interessa (non tutte le lingue hanno {} per cominciare!); piegare in Vim è un argomento a sé stante. – Rook

risposta

70

Se si dispone di :set foldmethod=syntax le pieghe verranno specificate dalle definizioni di sintassi. Se preferisci puoi :set foldmethod=indent per far rientrare il rientro nelle pieghe.

È possibile chiudere tutte le pieghe con zM. Se hai fold nidificati e vuoi passare livello per livello, usa zm. Per aprire le pieghe utilizzare zR (tutto) e zr (livello per livello).

+0

Penso che tu abbia frainteso il mio significato. In un primo momento, ho bisogno di impostare la piega per ogni funzione. Voglio solo sapere come impostare la piega per tutte le funzioni nel primo tempo. –

+0

@Yongwei: ok, penso di averlo capito ora. Questo è quello che volevi? –

+1

zR e zm non funzionano dopo aver impostato foldmethod = sintassi –

8

Se ogni funzione ha la sua parentesi graffa aperta sulla prima colonna si potrebbe fare:

:%g/^{/normal! zf% 

Forse è più chiaro in questo modo:

:%g /^{/ normal! zf% 

il comando g seleziona linee secondo il seguente pattern ed esegue un comando ex (qui normal! per riprodurre i tasti in modalità normale).

Vedi :help :g e :help :normal

+0

Io uso questo - grazie tuttavia come si può evitare di piegare attraverso le funzioni? sembra che non siano solo le funzioni – serup

4

mi sono imbattuto in questo quando ero alla ricerca di una cosa simile. Ovviamente lo avresti già capito, ma a beneficio di altre persone risponderò comunque.

è necessario mettere le seguenti righe nel tuo Vimrc:

set foldmethod=syntax 
set foldnestmax=1 
3
set foldlevel=0 

sarà piegare tutto fin dall'inizio, quello che viene ment essere piegato. A seconda della lingua e della funzione di piegatura, il contenuto della piegatura può variare.

+1

'zM' fare la stessa cosa. – MOHRE

1

Prova :%g/\(function\_.\{-}\)\@<={/ normal! f{zf%

Spiegate a poco a poco:

:%g - cercare globaly in un intero file

/\(function\_.\{-}\)\@<={/ - modello per trovare prima '{' dopo ogni 'funzione' e mettere il cursore sulla iniziare di stringa con quello '{'

normal! f{zf% - eseguire in avanti a '{' f{ e fare piega con mossa '%' zf% su tha t stringa

+1

non è riuscito a far funzionare il tuo comando - forse mostra le funzioni di esempio – serup

1

stavo cercando di fare lo stesso e ha finito per fare semplicemente:

setlocal foldmethod=marker 
setlocal foldmarker={,} 

usa il metodo piega marcatore e cambia il marcatore in una singola parentesi graffa (per impostazione predefinita il marcatore è {{{).

+0

Mi è piaciuto molto, molto utile! Ma dovrei dividere le linee che chiudono una parentesi e ne aprono un'altra (come "} else {") –

Problemi correlati