(このスクリプトに関する新しい記事があります https://qiita.com/astrorobot110/items/4ea8b865ca68f55ec25c)
正月に勢いだけで作ったscriptのエントリを勢いで投稿してるんだけど、実はその他に年末にも作ってたのがあって、結構いい感じだったんでなんとなく投げておきます。歳の話はするな。
ソース
(2019/1/11 修正)
closer.vim
function! closer#main() abort
let pos = getcurpos()
let bracketList = split(&matchpairs, '[:,]')
let bracket = ''
while search('['.escape(join(bracketList,''), '\.*^$]~/').']','bW')
let bracketIdx = match(bracketList, matchstr(getline('.'), '.', col('.')-1))
if bracketIdx % 2 == 1
norm %
else
let bracket = bracketList[bracketIdx+1]
unlet bracketIdx
break
endif
endwhile
call setpos('.', pos)
return bracket
endfunction
command! Closer echo closer#main()
何これ
バッファ内を遡りながらmatchpairs
に登録してあるもので、直近のまだ閉じてない(と思われる)括弧を見つけて閉じます。
括弧閉じるのにバッファ検索するスクリプト奴ー
僕のvimの使い方の問題なんですが、基本的にスクリプトキディの域を出ないのでむしろmarkdown筆頭に文章打ちとして使うことのほうが多いんです…で、全角括弧を閉じるのって必ず変換が伴うめんどくさい手順なので出来るだけラク出来ないものか、ということです。幸いmatchpairs
はマルチバイトの文字も問題なく食べてくれるので思想信条が許す限り1は突っ込んでおきました。
丁度インサートモード中の<C-b>
は空いているのでここが適役だと思うんですけどね。
-
とりあえずsjisのマルチバイトの括弧だけあれば… ↩