LoginSignup
1
0

More than 3 years have passed since last update.

括弧閉じ閉じ

Last updated at Posted at 2019-01-05

(このスクリプトに関する新しい記事があります 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>は空いているのでここが適役だと思うんですけどね。


  1. とりあえずsjisのマルチバイトの括弧だけあれば… 

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0