
Мне нравится 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
.