2012-05-04 1 views
6

Existe-t-il un moyen de déplier le code lorsque vous accédez à un numéro de ligne? Par exemple je tape :35 où la ligne 35 est pliée, alors je dois déplier cette section manuellement pour arriver à cette ligne. Je voudrais taper :35 et avoir ce code déplié automatiquement et mon curseur mis sur la ligne 35 sans autres appuis sur les touches.Développer automatiquement le pli lorsque vous passez à un numéro de ligne

Répondre

7

Si vous utilisez la commande 35G au lieu de :35, vous pouvez y parvenir avec le mappage suivant:

"[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') 

Pour :35 lui-même, ce serait difficile à réaliser. Vous devez intercepter le <CR> via un , vérifier la commande tapée via getcmdtype() et getcmdline(), et, s'il s'agit d'un nombre, manipuler la commande, c'est-à-dire ajouter normal! zv; comme ceci:

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

zv. De :help zv:

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

Bien que cette commande pourrait probablement être déclenché automatiquement en quelque sorte, je ne l'ai pas rencontré encore. Utiliser la commande telle quelle m'a bien servi, cependant.

+0

Combiner cela dans ': au CursorMoved *: normal zv' devrait faire l'affaire. – MaienM

+0

@MailenM: Cela ouvrira tout repli que vous déplacerez, même si vous vous déplacez avec 'j' /' k' - je doute que ce soit utile. –

0

Définissez un nouveau mappage de commande. Dans cet exemple, j'ai choisi \gz:

:nmap \gz gg<Bar>zO 
Questions connexes