Vim の未知なる可能性を模索している、Vim 使いの「ブイ」(仮名)です。14 回目のテーマは「コメントアウト」です。Vim で簡単にコメントアウトを扱う方法について解説します。
1 NERDCommenter¶
残念ながら、Vim には標準のコメントアウト機能はありません [1]。コメントアウトを自動化したければ外部プラグインを導入するしかないのです。コメントアウトプラグインとして有名なのは NERDCommenter です。
http://www.vim.org/scripts/script.php?script_id=1218
歴史が長いプラグインですが、多くの言語に対応しており、機能的には十分です。
コメントアウトするには、領域を選択してから <Leader>cc
を入力します。コメントアウトを解除するには <Leader>cu
を用います。コメントアウトをトグルするには、<Leader>c<Space>
を入力します。
<Leader>
というマッピングには聞き覚えがない人も多いでしょうから、簡単に解説しておきます。<Leader>
はプラグインやユーザ用に割り当てられたマッピングです [2]。初期設定では、<Leader>
はバックスラッシュに割り当てられています。しかしこのキーは押しにくいので ”,” にマッピングする人が多いようです。<Leader>
に割り当てるキーを変更するには .vimrc 内で次のように設定します。
let mapleader = ','
ちなみに、<Leader>
以外にも <LocalLeader>
というマッピングがあります。これはファイルタイプ固有のプラグインで利用されることが多いです。
標準で用意されているキーマッピングが邪魔な場合は、.vimrc 内で次の設定をしておくとよいでしょう。
let g:NERDCreateDefaultMappings = 0
下記の設定をしている人もよく見かけます。
let NERDSpaceDelims = 1
これは、コメントアウト時にスペースを 1 つ挿入するようになる設定です。
2 caw.vim¶
caw.vim は NERDCommenter よりも後に登場したプラグインです。細かい挙動をカスタマイズ可能で、NERDCommenter よりも設計が洗練されているように見えます。
https://github.com/tyru/caw.vim
デフォルトでは NERDCommenter とは異なり、gc
のマッピングをプレフィクスとしてキーマッピングが定義されています。これを変更する場合は、次のように .vimrc 内に記述します。
nmap <Leader>c <Plug>(caw:prefix)
vmap <Leader>c <Plug>(caw:prefix)
デフォルトだと、gci
がコメントアウト、gcui
がアンコメントアウト、gcc
がコメントアウトのトグルです。プレフィクスを変更すると、例えば上記の設定では、<Leader>ci
がコメントアウト、<Leader>cui
がアンコメントアウト、<Leader>cc
がコメントアウトのトグルとなります。
caw.vim が対応しているファイルタイプは :help
caw-supported-filetypes
で参照することができます。
残念ながら「Vim のすゝめ」は今回で最終回を迎えます。次回からは Vim に関する新連載「Vim 8.0 のすゝめ」が開始される予定です。ついに現れる(予定の) Vim 8.0、Vim 7.0 以来の大幅アップデートは何が変わるのか?より濃くなる解説にご期待ください。
[1] | 軽く調べてみたところ、Emacs の場合は、M-x comment-dwim (M-;) を使用することで、外部プラグインをインストールすることなしにコメントアウトができるようでした。最近だと、comment-dwim-2 という外部パッケージも登場しているようです。https://github.com/remyferre/comment-dwim-2 |
[2] | Emacs の場合、<C-c> がそれに相当しています。とはいえ、Vim
の場合はマッピングするキーに比較的余裕があるので <Leader> を多用する場面はあまりありません。 |