2012-05-04 22 views
6

C'è un modo per sganciare il codice quando si passa a un numero di linea? Ad esempio, digito il numero :35 dove la riga 35 viene piegata, quindi devo aprire manualmente quella sezione per arrivare effettivamente a quella linea. Vorrei digitare :35 e avere quel codice poi spiegato automaticamente e il mio cursore messo sulla linea 35 senza ulteriori pressioni dei tasti.Espandi automaticamente la piegatura quando si passa a un numero di linea

risposta

7

Se si utilizza il comando 35G invece di :35, si può raggiungere questo obiettivo con la seguente mappatura:

"[count]G  Also open fold under cursor when supplying [count] (i.e. 
"    jumping to a particular line, not the end of the 
"    buffer). Use [count]|gg| if you don't want this. 
nnoremap <expr> G (v:count ? 'Gzv' : 'G') 

Per :35 stesso, questo sarebbe difficile da raggiungere. Dovresti intercettare lo <CR> tramite un :cmap <expr>, controllare il comando digitato tramite getcmdtype() e getcmdline() e, se si tratta di un numero, manipolare il comando, ad esempio aggiungere normal! zv ad esso; così:

cmap <expr> <CR> getcmdtype() == ':' && getcmdline() =~ '^\d\+$' ? 'normal! zv<CR>' : '<CR>' 
2

zv. Da :help zv:

View cursor line: Open just enough folds to make the line in 
    which the cursor is located not folded. 

Mentre questo comando potrebbe probabilmente essere attivato automaticamente, in qualche modo, io non ho incontrato ancora. Usare il comando as-is mi è servito bene, però.

+0

Combinare questo in ': au CursorMoved *: normale zv' dovrebbe fare il trucco. – MaienM

+0

@MailenM: Questo aprirà qualsiasi piega su cui ti sposti, anche quando si muove con 'j' /' k' - dubito che ciò sia utile. –

0

Definire una nuova mappatura dei comandi. In questo esempio, ho scelto \gz:

:nmap \gz gg<Bar>zO