もた日記

くだらないことを真面目にやる

Vimメモ : コメント化/コメント化解除

Vimでコメント化/コメント化解除する方法はいろいろあるみたいなので調べてみる。

矩形ビジュアルモードを使用


Ctrl-vの矩形ビジュアルモードでテキストを選択後、Iを入力してコメント化文字列の#を入力、その後Escを押せば一瞬遅れて選択した行に編集が反映される。
追加した文字を削除したければ矩形ビジュアルモードで選択してxを押す。

選択範囲に対してノーマルモードのコマンドを実行


下記コマンドを実行するとファイル全体に対して先頭に#が追加される(なお、normalはnormでもよい)。

:%normal i#

%はファイル全体を表すため、例えば3行目から5行目だけに追加したい場合は以下のように実行する。

:3,5normal i#

先頭に追加した文字を削除する場合は下記コマンドを実行する。

:%normal x


選択範囲に対して置換コマンドを使用


置換コマンドを使用して先頭に#を追加/削除する。
コメント化

:%s/^/#/

コメント化解除

:%s/^#//


プラグインを使用


このようにVimの標準機能である程度はできるが、プラグインを使うともっと簡単にできる。

vimawesome.com

プラグインを検索可能なVim Awesomeで調べてみたら下記プラグインが人気らしい。


commentary.vimを使用


マニュアルが簡単そうだったcommentary.vimを使用してみる。
NeoBundleを使用している場合は下記行を追加してインストール。

NeoBundle 'tpope/vim-commentary'


インストール後はノーマルモードでgc{motion}を実行するとコメント化/コメント化解除が切り替えられる。例えば、gcGと入力すれば現在行から最終行までコメント化できる。現在行をコメント化したい場合はgccと入力する。
{Visual}gcという使い方もできるのでビジュアルモードで選択してからgcを入力してもよい。また、コマンドラインモードで:%Commentaryと実行すれば全ての行がコメント化される。

プラグインの良い点は自動でファイルタイプを判別してくれるところで、例えば.rbなら#.jsなら//のように適切にコメント化してくれる。
対応していないファイルタイプに対してコメント化文字列を指定したい場合は下記のような行を.vimrcに追加する。

" 例えばrubyのコメント化文字列を$に変更(%sは元の文字列)
autocmd FileType ruby setlocal commentstring=$\ %s
" *.logファイルのコメント化文字列に#を指定
autocmd BufNewFile,BufRead *.log setlocal commentstring=#\ %s

実践Vim 思考のスピードで編集しよう!

実践Vim 思考のスピードで編集しよう!