Как команда J в Vim, но сделайте движение

Как команда J в Vim, но сделайте движение

Мне нравится Jкоманда для объединения многих строк, но не нравится необходимость подсчитывать, сколько строк я хочу объединить. Я бы предпочел дать движение. Это можно подделать с помощью V{motion}J; есть ли способ, который не требует перехода в визуальный режим (и, следовательно, затирания регистра *)?

решение1

Я думаю, что нет оператора join по умолчанию. Но вы можете использовать этот код, изстарая ветка vim на ту же тему:

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 

Обратите внимание, что при использовании этого фрагмента нельзя будет использовать Jдля соединения пары строк — для этого необходимо будет использовать Jj(или JJиз-за omap J j).

решение2

Вы можете сделать что-то вроде:

:.,/pattern/join

По сути, вы говорите Vim объединить диапазон строк, .при этом текущей строкой будет строка, на которой находится курсор, а последней строкой будет первое совпадение pattern.

Связанный контент