2012-05-04 10 views
6

¿Hay alguna forma de desplegar el código al ir a un número de línea? Por ejemplo, escribo :35 donde está doblada la línea 35, luego tengo que desplegar esa sección manualmente para llegar a esa línea. Me gustaría escribir :35 y tener ese código desplegado automáticamente y mi cursor poner en la línea 35 sin ninguna pulsación de tecla.Expandir automáticamente veces al ir a un número de línea

Respuesta

7

Si se utiliza el comando 35G en lugar de :35, se puede lograr esto con la siguiente asignación:

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

Para :35 en sí mismo, esto sería difícil de lograr. Debería interceptar el <CR> a través de :cmap <expr>, verificar el comando escrito a través de getcmdtype() y getcmdline(), y, si es un número, manipular el comando, es decir, anexar normal! zv; como este:

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. 

Aunque este comando, probablemente podría ser activado de forma automática, de alguna manera, no he encontrado todavía. Sin embargo, usar el comando as-is me ha servido bien.

+0

Combinar esto en ': au CursorMoved *: zv normal debería hacer el truco. – MaienM

+0

@MailenM: Eso abrirá cualquier pliegue sobre el que se mueva, incluso cuando se mueva con 'j' /' k' - Dudo que esto sea útil. –

0

Define una nueva asignación de comandos. En este ejemplo, he elegido \gz:

:nmap \gz gg<Bar>zO 
Cuestiones relacionadas