Engineer as a Lifestyle @tenkoma

tenkoma's testing blog

続・AutoClose.vim

Autoclose.vim - Engineer as a Lifestyle @tenkomaの続き
まずは便利な使い方を知ったので紹介します。その後でちょっとした問題をぐちぐち語ります。

hogehoge

ここで、「hogehoge」を「{"hogehoge"}」にしたいとき、AutoClose.vimをつかって、
<ESC>0i{"<ctrl+o>A<ESC>でできます。
僕はinsert modeでカーソル移動出来るように

"挿入モードで移動
inoremap <C-a> <Home>
inoremap <C-e> <End>
inoremap <C-f> <Right>
inoremap <C-b> <Left>

と書いているので、<ctrl+o>Aのかわりに<ctrl+e>を使いますが。

ちょっとした問題が…

挙動がわからなくなることがあります。
ある程度「"」や「{」を打ち込んだあとでinsert modeを出るとめちゃくちゃなところで「"}}"}」みたいな文字列が出現してあせることがよくあります。閉じ記号は開き記号の入力で自動的に入力されるだけではなく専用のスタックに保存されている模様(ここでは閉じ記号スタックと呼ぶことにしましょう)
まずは、閉じ記号スタックの中身はステータスバーに表示されているので、それを見ておくのが原則なんでしょうかね。いままで全然みていませんでしたが。
「"」や「{」を単発で入力したいときはどうすればいいのでしょうか。「)}]」といった開く・閉じる系の記号で使われていない文字をタイプすると、一気に閉じ記号スタックを解放して、閉じ記号の後に移動できます。また閉じ記号が削除されていても復活しちゃいます。ので、例えば、「{"」と入力したあとで、行が次のような状態になっているとき、(「*」はカーソルの位置)

{"*"}

「)}]」を使うと、

{""}*

となるし、

{"*

のように閉じ記号を削除したところでinsert modeを出ると、

{""*}

のようになります。
だから「{"」という入力だけが欲しいときはスタックを解放したあとで、2回バックスペースするとかやってますが、どうみてもバッドノウハウです。本当にありがとうございました。
vimスクリプトを除いてみると、関数が幾つか定義されていますが、閉じ記号スタックをすべて解放して、表示されている閉じ記号も消してくれる、そういうコマンドまたは設定はないのでしょうか…。