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