ここまでの内容でも、括弧やクォーテーションの入力がとてもやりやすくなったのではないか、と思います。
しかし、もっと使いやすくするカスタマイズ方法があります。
では、はじめていきましょう。
選択した文字列を挟むように括弧を入力
つづいて、文字列を選択した状態で括弧を入力すると、その文字列を挟むように括弧を入力できるようにします。
ここで私が戸惑ったのは、行選択したときに括弧を入力したときの、インデントでした。
今回は、括弧から閉じ括弧までのインデントを、=
によってあらためて修正する方法にしています。
"括弧で挟む
function! ClipInParentheses(parenthesis) abort
let l:mode = mode()
let l:parentheses = { "{": "}", "[": "]", "(": ")" }
if l:mode ==# "v"
return "\"ac".a:parenthesis."\<ESC>\"agpi".l:parentheses[a:parenthesis]
elseif l:mode ==# "V"
return "\"ac".l:parentheses[a:parenthesis]."\<ESC>\"aPi".a:parenthesis."\<CR>\<ESC>\<UP>=%"
endif
endfunction
今回の場合、選択モードで括弧が入力されたときにこの関数を呼び出したいので、つぎのものを追加します。
xnoremap <expr> { ClipInParentheses("{")
xnoremap <expr> [ ClipInParentheses("[")
xnoremap <expr> ( ClipInParentheses("(")
選択した文字列を挟むようにクォーテーションを入力
括弧のときと同様に、選択した文字列を挟むように、クォーテーションを入力できるようにしていきます。
行選択で複数行をクォーテーションで挟むことは少ないと思うので、括弧のときよりも単純になります。
"クォーテーションで挟む
function! ClipInQuot(quot) abort
let l:mode = mode()
if l:mode ==# "v"
return "\"ac".a:quot."\<ESC>\"agpi".a:quot
endif
endfunction
また、クォーテーションが入力されたときに、この関数を呼び出したいので、つぎのものを追加します。
xnoremap <expr> ' ClipInQuot("\'")
xnoremap <expr> " ClipInQuot("\"")
xnoremap <expr> ` ClipInQuot("\`")
これで、括弧とクォーテーションの補完機能を作ることができました。
まとめ
今回は、括弧とクォーテーションの補完機能を作りました。
プログラミングを効率的に行なうには、やはり補完機能はとても大切です。
ただ、私はプラグインをできる限り入れたくない主義でして、機能は自分が使う最低限のものだけがいいんです。
機能を自作するというのは、自分が欲しいものだけの機能にすることができますし、なによりも、これからどんどん自分好みにカスタマイズして使っていくことができます。
また、つぎのページに、今回作った機能をまとめたコードを公開します。.vimrc
にコピペすれば動くと思います。