VimにTODOやFIXMEなどのコメントを一覧表示する方法

2934 ワード

前言
多くのプログラマは、私を含めて、コードを書く時に、TODO、FIXME、HACKなどをいくつかの注釈のプレフィックスとして使います。このように自分と後から来る者は先に関連している注釈とコードの状況を知っています。
しかし、このような備考は後にこのコードを見た時にしか見られません。一回のリリースや空き時間に、直感的なインターフェースがあって、このプロジェクトの中のすべてのこのようなキーワードを見ることができます。
この時は簡単なカスタムコマンドがあなたに役立つかもしれません。

command Todo Ack! 'TODO\|FIXME'
効果は以下の通りです

しかし、このコマンドを有効にするには、環境準備が必要です。
Ack
まず、私たちはAckまたはAgをインストールしたいです。この二つは全部コマンドラインの下のグローバル検索ツールです。システムが持っているgrepよりずっと速いです。
ここのインストールはAgを例にとって、これはCに基づいて書き換えられたAckであり、多くの特性が追加されています。効率もAckよりずっと速いです。

# OSX
brew install the_silver_searcher
# Archlinux
pacman -S the_silver_searcher
# Ubuntu
apt-get install silversearcher-ag
インストールが完了したら、shellでテストできます。

ag TODO ./
Ack.vim
Ack.vimは、Vim内でAck/Agを使用し、Quickfixを介して検索結果を提供するためのプラグインである。
しかし、このプラグインは、デフォルトでは検索エンジンとして使われています。私たちがインストールしたAgを使うためには、~/.vimrcの中にいくつかの構成が必要です。

if executable('ag')
 let g:ackprg = 'ag --vimgrep'
endif
この配置は引用された公式倉庫のReadmeです。
でも、たくさんの人が使うのを見ます。

if executable('ag')
 let g:ackprg = 'ag --nogroup --nocolor --column'
endif
本人がテストしてみたところ、両者の違いは何もありませんでした。Agにとって --vimgrepは、--nogroup --nocolor --columnに等しいかもしれない。
この時はVimのコマンドラインに入力します。

:Ack! TODO 
上の図のような効果を実現することができます。

:AckAdd FIXME
このように他の見るべきものを追加します。
でも、このような方式では、命令がちょっと長いです。上の命令の代わりにaliasを配置します。怠け者の考えに合っています。~/.vimrcに追加されました。

command Todo Ack! 'TODO\|FIXME'
そして、Vimのコマンドラインに入力します。

:Todo
現在のプロジェクトの中のすべてのTODO、FIXMEをリストアップすることができます。そして自分の必要に応じてこのようなキーワードを拡張できます。私のように下記のコードに拡張します。

command Todo Ack! 'TODO|FIXME|CHANGED|BUG|HACK'
command Debug Ack! 'NOTE|INFO|IDEA'
TodoとDebugの2つの機能が区別されています。
ハイライト
Vimでは自動的に高亮TODO、FIXMEが表示されますが、高亮CHANGEDのようなキーワードはないので、手動で指定する必要があります。~/.vimrcには以下のような構成が追加されています。

if has("autocmd")
 " Highlight TODO, FIXME, NOTE, etc.
 if v:version > 701
 autocmd Syntax * call matchadd('Todo', '\W\zs\(TODO\|FIXME\|CHANGED\|BUG\|HACK\)')
 autocmd Syntax * call matchadd('Debug', '\W\zs\(NOTE\|INFO\|IDEA\)')
 endif
endif
上記のコードは抜粋されています。具体的な機能はTODOなどのキーワードにマッチして、文法がハイライトされます。
以上、簡単で使いやすいTODOマネージャが完成しました。
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらすことを望んでいます。もし疑問があれば、メッセージを残して交流してください。ありがとうございます。