Como el comando J en Vim, pero realiza un movimiento

Como el comando J en Vim, pero realiza un movimiento

Me gusta el Jcomando para unir muchas líneas, pero no me gusta tener que contar cuántas líneas quiero unir. Preferiría presentar una moción. Esto se puede falsificar con V{motion}J; ¿Hay alguna manera que no implique ingresar al modo visual (por lo tanto, golpear el *registro)?

Respuesta1

Creo que no existe un operador de unión predeterminado. Pero puedes usar este código, desdeun viejo hilo de vim sobre el mismo tema:

nnoremap J :set operatorfunc=Joinoperator<CR>g@
nnoremap gJ :set operatorfunc=GJoinoperator<CR>g@
onoremap J j
func! Joinoperator(submode)
        '[,']join
endfunc
func! GJoinoperator(submode)
        '[,']join!
endfunc 

Tenga en cuenta que no será posible utilizar este fragmento Jpara unir un par de líneas; será necesario utilizarlo Jj(o JJdebido a omap J j).

Respuesta2

Puedes hacer algo como:

:.,/pattern/join

Básicamente, le estás diciendo a Vim que una un rango de líneas, .siendo la línea actual en la que se encuentra el cursor y la última línea siendo la primera coincidencia de pattern.

información relacionada