Como o comando J no Vim, mas faça um movimento

Como o comando J no Vim, mas faça um movimento

Gosto do Jcomando para juntar muitas linhas, mas não gosto de ter que contar quantas linhas quero juntar. Prefiro fazer uma moção. Isso pode ser falsificado com V{motion}J; existe uma maneira que não envolva entrar no modo visual (dando assim uma derrota no *registro)?

Responder1

Acho que não existe um operador de junção padrão. Mas você pode usar este código, deum antigo tópico do vim sobre o mesmo assunto:

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 

Observe que usando este trecho não será possível usar Jpara unir um par de linhas - será necessário usar Jj(ou JJdevido ao omap J j).

Responder2

Você pode fazer algo como:

:.,/pattern/join

Essencialmente, você está dizendo ao Vim para juntar um intervalo de linhas, .sendo a linha atual em que o cursor está e a última linha sendo a primeira correspondência de pattern.

informação relacionada