🖇️
vim-operator-join
選択範囲の行を連結するオペレータがあるだろうと思って調べたら思いのほかヒットしなかったので書きました。
function! s:operator_join(type = '') abort
if a:type == ''
set operatorfunc=function('s:operator_join')
return 'g@'
endif
normal! `[v`]J
endfunction
nnoremap <expr> J <sid>operator_join()
例えば、Jip
で現在のパラグラフを1行に連結できます。
[追記] Vimファイルで行連結のバックスラッシュを削除する
上記の設定でしばらく使用していたのですが、Vimファイルでこれを使うと、行連結のバックスラッシュ(:h line-continuation
)が残ってしまうことが気になったので、Vim用に設定を追加しました。
function! s:operator_join(type = '') abort
if a:type == ''
set operatorfunc=function('s:operator_join')
return 'g@'
endif
+ if &filetype ==# 'vim'
+ " remove line-continuation, ignore first line
+ let from = line("'[")
+ let to = line("']")
+ let range = from + 1
+ if from != to
+ let range ..= ',' .. to
+ endif
+ execute printf('silent! %ssubstitute/^\s*\\s*//', range)
+ execute printf('keepjump normal! %sGV%sGJ', from, to)
+ return
+ endif
normal! `[v`]J
endfunction
nnoremap <expr> J <sid>operator_join()
指定した範囲の行頭から\
を取り除けば良いのですが、最初の行を除外する必要があるため、すこし複雑な記述になっています。
Discussion