vimで()や""などの括弧を自動補完しようとしたら迷走した

2013年6月18日火曜日

vim

t f B! P L
追記2016-02-17
この記事を読まないでvim-smartinputを使うとよろし

括弧の閉じ忘れミスを減らそうと思ってvimの自動補完を考えたら迷宮に入った気分になった。
とりあえずこう書いておいて、あとでまた考えることにする。

----------------------------------
function! g:needSemicolon()
if &filetype =~ 'ruby\|vim'
return "\<LEFT>"
else
return ";\<LEFT>\<LEFT>"
endif
return ""
endfunction
inoremap <expr><Plug>endSemicolon g:needSemicolon()
imap (; ()<Plug>endSemicolon
imap {; {}<Plug>endSemicolon<CR><ESC>O
imap [; []<Plug>endSemicolon
imap "; ""<Plug>endSemicolon
imap '; ''<Plug>endSemicolon
imap /; //<Plug>endSemicolon
inoremap <> <><LEFT>
inoremap {<CR> {<CR>}<ESC>O

----------------------------------
関数名や妙なキーバインドからも迷走具合がよくわかる。
でもこの{}は気持ちがいい。
inoremap {<CR> {<CR>}<ESC>O

以下はどのように迷走したかを書く感じで。




最初は
inoremap ( ()<LEFT>
とか
inoremap () ()<LEFT>
とかやってたんだけど最近触りだしたjavascriptを使っていると
function(){処理}
のような形が多くてコメントアウトしてしまった。

括弧を閉じた時にカーソルが括弧の中にあって欲しいときと外にあって欲しいときがあるんだなと思った。
まだ考えがまとまってないけど
「とりあえずセミコロンが直後に来るような括弧はカーソルが括弧の中に入っていたほうがいいよね。o押せば次の行にかけるわけだし。」
という安直な考えで
imap (; ();<LEFT><LEFT>
と書いた。
もしかすると(;じゃなくて();にしたほうがよかったかもしれない。とfor文を思い浮かべながら思ったけど後でいいや。
セミコロンを書きたくない言語とかもあるから&filetypeを見て分岐する。rubyとvimしか除外していないあたり完全に自分用である。だがそれがいい。

{}だけはほとんどの場合改行するから最初から改行してみる。キーバインドも{<CR>。
vimのインデントと合わさってIDEみたいな動きになったらいいな。


こんなことを考えていたらすごく時間がたっていた。
括弧の自動補完の挙動をどうやって気持ちよくするかっていう哲学って存在するんじゃないかな。
括弧学みたいな感じで。流行れ。

ブログ アーカイブ

QooQ