ctags
コマンドで%INCLUDE%
フォルダ上のヘッダーの定義情報をファイル(デフォルト名 tags
)に格納しVimなどからリファレンスとして活用できるようにします。
- Visual Studio 2017 CommunityなどでC++開発環境がインストールされていること
- Universal CTAGSの
ctags
およびreadtags
コマンドのPATH
が通ってること
まず、開発用コマンドプロンプトを起動するか vcinitなどで%INCLUDE%などの変数にアクセスできるようにしてください。
そこで次のコマンドを適当な書き込み権限のあるフォルダで実行します。
ctags --extras=+q -h "..h" --langmap="C++:..h" -R "%INCLUDE:;=" "%"
処理には時間がかかります。ディスク容量(環境次第ですが100MB~)なども注意してください。
これでtagsファイルが作成されます。ここでの注意点はctags
のオプション-h "..h"
と--langmap=C++:..h
です。
- まずデフォルトでは拡張子のないファイルは読み取られませんので
-h "..h"
として.h
および.
すなわち拡張子のないファイルを読み取ることを指定します。(ctagsでは空のドットが拡張子のないファイルという意味になります) - 次に
--langmap=C++:..h
も同様に.h
および拡張子のないファイルがC++言語のファイルであることを指定します。ctagsは拡張子で言語を判定しますのでこの指定がなければやはりタグが生成されません。また、ここでC++:
ではなくC:
としてしまうと、C++固有の箇所がタグ生成されませんので注意してください。
以上のことからこの2つのオプション指定がないと拡張子のないヘッダーファイル(standard libraryなど)が含まれません。詳細はtags --help
にてご確認ください。
tagsファイルの生成が完了したらreadtag
コマンドなどで確認してください。
readtag CoCreateInstance
readtag vector
readtag wstring
拡張子のないファイル(vectorなど)もタグ付けできているはずです。
Visual Studioで頒布されるヘッダーファイルではhppなどの拡張子はなかったはずですが-h
オプションは必要に応じよくご確認ください
なお、--extra
についてはctags --list-extras
コマンドで確認できます。必要に応じご調整ください。
ctags --list-extras
#LETTER NAME ENABLED LANGUAGE FIXED DESCRIPTION
- subword no NONE no Include tags for subwords generated by splitting the original tag (only for ctags development)
F fileScope yes NONE no Include tags of file scope
f inputFile no NONE no Include an entry for the base file name of every input file
g guest no NONE no Include tags generated by guest parsers
p pseudo yes NONE no Include pseudo tags
q qualified no NONE no Include an extra class-qualified tag entry for each tag
r reference no NONE no Include reference tags
s subparser yes NONE no Include tags generated by subparsers
- funcmap yes QemuHX no Include mapping SQMP to C function name
- whitespaceSwapped yes Robot no Include tags swapping whitespace and underscore chars
拡張子が無いファイルであってもファイル中にヒントがあれば、それを利用できます。
例えば // -- C++ -- と書かれていれば ctags に -G オプションをつけると、C++パーザを
選択してくれます。