vim でコメント化するプラグインはいくつかありますが、その中でも NERD_Commenter のできが一番いい気がします。が、どうもデフォルトのマッピングがいかんせん使いにくいのです。
昔から入れてはいたのですが、マッピングの悪さもあってあまり使う機会がありませんでした。ということで、これをなんとかまともにして、使えるプラグインにしてみましょう。
まず、NERD_Commenter のデフォルトのキーマッピングは、,cc などプレフィックスが ,c 固定です。<Leader> も <LocalLeader> も見てくれないので、まあなんというか困ったもんです。
さらに、そういう問題とは別に、ノーマルモードでは行指向で動いていたものがビジュアルモードでは選択範囲指向だったり、ともかくなんか変なのです。
デフォルトのマッピングの無効化
ということで、まずは NERD_Commenter が勝手にマッピングを設定しないようになってもらいましょう。あと、個人的に NERDSpaceDelims は設定したいです。
let g:NERDCreateDefaultMappings = 0
let g:NERDSpaceDelims = 1
基本マッピング
基本的にコメントは <Leader>c で発動することにします。ただし、d/D や y/Y のように、大文字を活用することで挙動を変えます。
具体的には、ノーマルモードで <Leader>cc で行コメント、<Leader>C で行末までをコメント化、ビジュアルモードでは <Leader>c で選択範囲コメント、<Leader>C で選択範囲行コメントとします。行指向の場合は NERDCommenterAlignLeft の方が NERDCommenterComment よりしっくりくる気がします。
nmap <Leader>cc <Plug>NERDCommenterAlignLeft
vmap <Leader>c <Plug>NERDCommenterComment
nmap <Leader>C <Plug>NERDCommenterToEOL
vmap <Leader>C <Plug>NERDCommenterAlignLeft
アンコメント
プレフィックスを <Leader>c とか固定にするという戦略は捨てたので、アンコメントに別のマッピングが必要です。<Leader>u あたりを使っておきましょう。
nmap <Leader>u <Plug>NERDCommenterUncomment
vmap <Leader>u <Plug>NERDCommenterUncomment
拡張コメント
個人的に NERDCommenterMinimal と NERDCommenterSexy は捨てがたいものがあるので、これは追加でマッピングを作っておきます。あと、ついでに NERDCommenterAltDelims も。
nmap <Leader>xm <Plug>NERDCommenterMinimal
nmap <Leader>xs <Plug>NERDCommenterSexy
vmap <Leader>xm <Plug>NERDCommenterMinimal
vmap <Leader>xs <Plug>NERDCommenterSexy
nmap <Leader>xa <Plug>NERDCommenterAltDelims
このあたりのコマンドは行指向なので、大文字でどうとかは考えません(ただ、NERDCommenterMinimal が行指向なのは明かに間違っている気がするが・・・)。
そんなこんなで
vim 的な考え方でコメント編集ができるようになったと思います。所詮プラグインの助けでコメントする所などテンポラリなものに過ぎない、と思えば <Leader>c と <Leader>u だけで十分な気はしますね。
あと、vmap は本当は xmap の方がいいのでしょうが、そうするとなんかシンタックスハイライトが変、という理由で vmap にしています(どうせ Windows とか使わんし)。