Esto es algo que me ha molestado por mucho tiempo. Probablemente la solución "correcta" sería enviar un parche a vim que le permita personalizar los límites de los párrafos con una expresión regular (como: establecer párrafos, pero realmente útil).
Mientras tanto, he hecho una función y un par de asignaciones que casi hace lo correcto:
function! ParagraphMove(delta, visual)
normal m'
normal |
if a:visual
normal gv
endif
if a:delta > 0
" first whitespace-only line following a non-whitespace character
let pos1 = search("\\S", "W")
let pos2 = search("^\\s*$", "W")
if pos1 == 0 || pos2 == 0
let pos = search("\\%$", "W")
endif
elseif a:delta < 0
" first whitespace-only line preceding a non-whitespace character
let pos1 = search("\\S", "bW")
let pos2 = search("^\\s*$", "bW")
if pos1 == 0 || pos2 == 0
let pos = search("\\%^", "bW")
endif
endif
normal |
endfunction
nnoremap <silent> } :call ParagraphMove(1, 0)<CR>
onoremap <silent> } :call ParagraphMove(1, 0)<CR>
" vnoremap <silent> } :call ParagraphMove(1, 1)<CR>
nnoremap <silent> { :call ParagraphMove(-1, 0)<CR>
onoremap <silent> { :call ParagraphMove(-1, 0)<CR>
" vnoremap <silent> { :call ParagraphMove(-1, 1)<CR>
Esto no controla correctamente los recuentos como '4}' modo visual o correctamente (elimine el comentario de las líneas de vnoremap bajo su propio riesgo), pero parece estar bien para cosas como no estropear el patrón de búsqueda actual y no parpadear. Además, 'd}', 'y}', etc. parecen funcionar bien. Si alguien tiene ideas para hacer que los recuentos funcionen o arreglen el modo visual, házmelo saber.
Este es un comienzo decente, pero tiene algunos problemas ... Los que vienen inmediatamente a la mente: modo visual, historial de búsqueda de tramposos, correctamente desarmar/restablecer 'hlsearch', el ligero parpadeo del cursor mientras se mueve hacia la barra de comandos (menor, sí, pero sigue siendo molesto). –
De todos modos, creo que es una buena solución ... Y, si no aparece nada más, puede ser la única solución (en cuyo caso, un poco de scripting Vim podría hacer que los problemas sean menos dolorosos). –