;"
で始まる変なテキストビットは何ですか?
class::member
にtagジャンプできるようにするには?
;"
で始まる変なテキストビットは何ですか?
しかしVi以外のエディタには、検索コマンドやtagファイルの3番目のフィールドの行
番号を処理するために、EXコマンドの必要最小限のみを実装したものがあります。も
しこの問題が起こったら、--format=1
オプションを使って、この拡張
をtagファイルに出力しないようにしてください(環境変数CTAGS
で、デ
フォルトの引数を設定することもできます)。ご使用のエディタのEXコマンドの処理
方法については、エディタの提供元にご確認ください。
この問題を解決するには、.emacsファイルに以下の行を追加してください。 etagsへのパスは、シンボリック・リンクがインストールされたパス名に置き 換えてください。
(autoload 'speedbar "speedbar") (setq speedbar-fetch-etags-command "/usr/local/bin/etags" speedbar-fetch-etags-arguments '("-f" "-"))
--format=1
オプションを指定し
てください。
class::member
にtagジャンプできるようにするには?
--extra=+q
オプションを指定することで、
ctagsは2番目に、C++のclass::member
形式のクラスメンバ(データと
関数/メソッド)とEiffel、 Javaのclass.method
形式のそれぞれのク
ラスレベルのtagを生成するようになります。
.ctags
ファイルにオプションを記述してください。
この問題を回避するには、ctagsがマクロtagの生成に検索パターンを使うように、
--excmd=p
オプションを指定してください。オリジナルのUNIX版ctags
が、マクロtagにだけ行番号を使っている理由を、決して非難するわけではありませ
ん。かといって、Exuberant Ctagsのデフォルトの振る
舞いが、オリジナルと異なる振る舞いをするように変更することに反対するわけでも
ありません。
標準のViは、この振る舞いを変更できるほど器用ではありません。しかしながら、 Vimには、この問題を最小限にする便利な機能が搭載されています。まずマッチした すべてを検査し、その状況で最適と思われるものを選択します。Vimは、要求された tagからマッチしたものを選択するためのコマンドも提供しています。
この問題を回避する最善の(もっとも効果的な)方法は、ディレクトリ階層のrootで、 --recurse(または -R)オプションを使って、ctagsを実行することです(したがって、 ctagsの実行回数は1回だけです):
ctags -R各ディレクトリで分割して、ctagsを実行したい場合は、
--sort=no
オ
プションを指定することで、毎回パス名でソートすることを防ぐことができます。い
ったんtagファイルが完成すれば、完成したtagファイルをsortコマンドで、マニュア
ルでソートするか、ctagsを最後に実行する際に--sortオプションを有効にすればよい
はずです。
http://people.delphiforums.com/gjc/gnu_regex.htmlmk_mvc.makとmk_bc5.makにあるREGEX_DIR makefileマクロにアーカイブを解凍して、 生成されたディレクトリへのパスを設定してください。
もし、エディタに複数tagファイルを扱う機能がなければ(オリジナルviにはな い)、他のディレクトリにあるtagにジャンプするのに、巨大な1つのtagファイ ルを使う以外に方法はありません。別のディレクトリのtagにジャンプする必要 がない(i.e. 各ディレクトリのソースファイルが完全に完結している)のであれ ば、必要に応じて、各ディレクトリ内にローカルtagファイルを作ればよいです。
この要素の趣旨は、ソース・ツリーのサイズと、ソースファイルがローカルか 遠隔のファイル・システム上にあるか、ということに依存します。 ソースファイルとtagファイルがローカルなファイル・システム上にある場合、 典型的なviは、ソートされたtagファイルを二分探索するように実装されている ため、tagの検索は、最初の想像ほど負荷はかかりません。これはご使用のエデ ィタにも該当するかどうかはわかりません。遠隔のファイル・システムにソー スファイルがある場合、大きなファイルを読むのに大きな負荷がかかります。
Exuberant Ctagsは、ソースコードの走査が特に 速い(およそ1-2 MB/sec)ですが、大規模なプロジェクトでは、頻繁な更新にた いしてtagファイルを維持する場合、または遠隔のファイル・システム上にソ ースファイルがある場合、不快な遅延が発生します。
1. プロジェクト内にtagの重複がどのくらい共通しているか?
2. 重複tagを扱う機能が、エディタに搭載されているか?
スタンダードviには搭載されていません。Vimのような最近の多くのvi実装 には、重複tagのリストから選択する機能があります。もしご使用のエディ タが重複tagをサポートしていない場合、期待したものかどうかに関係なく (他にマッチするものがあるかどうかさえ気づかず)、重複するうちの1つに ジャンプしてしまいます。
3. 重複tagの重要性は何か?
例えば、完全に独立したソフトウェア・コンポーネントから同じ名前の tagが2つある場合、最初にマッチしたコンポーネントBのtagにジャンプ してしまい、コンポーネントAのtagは、完全に見落としたり、混乱した りするため、都合が悪くなります(もしご使用のエディタにマッチしたtag の一覧を表示する機能があれば、そこから1つを選択すればよいのですが)。 しかしながら、並列に定義された同名の2つのtagがある場合(ことなるホス トのための、2つの初期化ルーチンなど)、常にどちらかを指定したいかも しれません。
アプローチ3の利点は、(ご使用のエディタが複数tagファイルと重複tagの両方を サポートしているものと仮定すると)たくさんあります。カレント・ディレクトリ にtagの位置があれば、検索が高速で、ローカルtagファイルの再生成も、1秒以下 で、すばやく簡単にできます(私はこの操作を簡単にするために、ショートカット キーを定義しています)。別のディレクトリで見つかったtag(必要であれば非 static)の検索は、ローカルtagファイルでは失敗します。しかし全ディレクトリ にまたがるグローバルtagファイルでは成功します。グローバルtagファイル(とロ ーカルtagファイルも)は、cronデーモンのジョブで定期的に自動再生成するように しておくとよいでしょう。
今、アプローチ3の実現方法の例を示します。他のアプローチ方法は、似たような 手段で実現することができます。
ディレクトリ構造の例を、ここに示します。
project `-----misccomp | `... `-----sysint `-----client | `-----hdrs | `-----lib | `-----src | `-----test `-----common | `-----hdrs | `-----lib | `-----src | `-----test `-----server `-----hdrs `-----lib `-----src `-----testtagファイルを構築するための、お勧めの(概念的な)解決策を示します。
#!/bin/sh cd $1 ctags *そして、以下のコマンドを実行します:
find * -type d -exec dirtags {} \;これらのtagファイルの再構築は、ディレクトリ内に変更がある間実行される ので、軽微(かつ究極に高速)です。現ソースファイルのディレクトリ内のtag ファイルを再構築するための、たいへん便利なVimキーマッピングの設定を以 下に示します:
:nmap ,t :!(cd %:p:h;ctags *.[ch])&
cd ~/project ctags --file-scope=no -Rこれで、全ディレクトリにわたる全ソースファイルにたいする非staticなtag のみを含むtagファイルを構築できます。
#!/bin/sh cd $1 ctags * # カレント・ディレクトリ以下の非static tagを追加する find * -type d -prune -print | ctags -aR --file-scope=no -L-そしてステップ3に示した環境設定を、以下のように置き換えます:
:set tags=./tags,./../tags,./../../tags,./../../../tags,tags注意としては、ステップ2で構築したグローバルtagファイルのファイル名フィールド には、グローバルtagファイルのあるディレクトリからの相対パスが出力されていると いう点である。これは、Vimの'tagrelative'オプションの利点を生かすためで、カレ ント・ディレクトリの代わりに、tagファイルの場所からの相対パスを解釈するためで す。スタンダードviでは、カレント・ディレクトリからの相対パスとして、パスを 解 釈するので、グローバルtagファイルを構築する場合、絶対パスを使わなければならな い。これは、ステップ2を以下のように置き換えることで実現できます:
cd ~/project ctags --file-scope=no -R `pwd`