¿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