vim code-folding

¿Es posible saltar a pliegues cerrados en Vim?



code-folding (2)

En Vim, con frecuencia me encuentro con ganas de hacer una rápida z k o z j para saltar al pliegue anterior o siguiente en un archivo. El problema es que con frecuencia quiero omitir todos los pliegues abiertos y simplemente saltar al pliegue cerrado más cercano.

¿Hay alguna forma de hacer esto? No veo ningún mapa de teclas incorporado en el manual.


No, no hay (por lo que sé) un método de compilación para hacer eso. Idea interesante, sin embargo.

Si tuviera algo de tiempo en este momento, podría tratar de encontrar una manera de hacerlo; desafortunadamente, estar ocupado hoy en día todo lo que puedo sugerir es mirar la línea Detectar una línea plegada o una pregunta de búsqueda incremental (particularmente la función foldclosed ). ) y trata de hacer una función tú mismo. Revisando cada línea, si el pliegue está abierto, salta ... algo en esas líneas.


Permítanme proponer las siguientes asignaciones implementando el comportamiento descrito.

nnoremap <silent> <leader>zj :call NextClosedFold(''j'')<cr> nnoremap <silent> <leader>zk :call NextClosedFold(''k'')<cr> function! NextClosedFold(dir) let cmd = ''norm!z'' . a:dir let view = winsaveview() let [l0, l, open] = [0, view.lnum, 1] while l != l0 && open exe cmd let [l0, l] = [l, line(''.'')] let open = foldclosed(l) < 0 endwhile if open call winrestview(view) endif endfunction