Vim: XML用入力補助設定

2007-06-04T23:05:00 / vim / comment

最近追加したVimのXML用の入力補助設定:

色々
inoremap <buffer> <LT>?  </
imap     <buffer> ?<LT>  <LT>?
inoremap <buffer> ?>  />
imap     <buffer> >?  ?>
タグを閉じるときにShiftの切り替えが面倒になってきたので、どう押しても構わないように変更した。
欠点: map元のキーシーケンスがXML declarationsやprocessing instructionsの両端と同じなので、そういうものを入力する際に少々困る。ただし、この手の記述は滅多に入力しないし、一から入力するよりもコピーすることの方が多いので、ほとんど問題にならない。
終了タグの補完 (その1)
inoremap <buffer> >>  ><LT>/<C-x><C-o><C-r>=
                   \    <SID>KeysToStopInsertModeCompletion()
                   \  <Return><C-o>F<LT>
カーソルの右側に出す感じ。開始タグの末尾の>を2回入力する。
終了タグの補完 (その2)
inoremap <buffer> ><LT>  ><Return>X<Return><LT>/<C-x><C-o><C-r>=
                      \    <SID>KeysToStopInsertModeCompletion()
                      \  <Return><C-o><Up><BS>
カーソルを包み込む感じ。開始タグの末尾の>の直後に<を入力する。
欠点: 連続して開始タグを入力しようとすると誤爆する。
補足
終了タグの補完は'iskeyword'を以下のように適宜設定していないと補完に失敗する場合がある (名前にハイフンを含むタグや、名前空間を示すプレフィックスが付いている場合)。
setlocal iskeyword+=45  " hyphen (-)
setlocal iskeyword+=58  " colon (:)
KeysToStopInsertModeCompletion()についてはVim: Insert mode completionの終了方法を参照。

動作デモ @ TTYShare