22

Ubuntu 8.04 を実行しており、次のコマンドを実行しました。

$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/stdlibcpp /usr/include/c++/4.2.4/

OmniCppComplete vim スクリプトで使用するために、私のシステムで標準 C++ ライブラリと STL ( libstdc++ ) の ctags データベースを生成します。これにより、非常に適切に機能する 4MB のタグ ファイルが得られました。

ただし、インストールされている Boost ヘッダーに対して同じコマンドを実行すると、次のようになります。

$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/boost /usr/include/boost/

最終的に 1.4 GB のタグ ファイルになりました。 まだ試していませんが、大きすぎて役に立たないようです。インストールした Boost ヘッダー用のよりスリムで使いやすいタグ ファイルを取得する方法はありますか?

編集

注意として、libstdc++ には TR1 が含まれており、Boost ライブラリが割り当てられています。したがって、libstdc++ が 4 MB のタグ ファイルを生成し、Boost が 1.4 GB のタグ ファイルを生成するには、何か奇妙なことが起こっているに違いありません。

Boostメーリングリストでこれに出くわしました:

Boost-users ブーストとオートコンプリート

答え

問題の原因を突き止めてくれた Neg_EV に感謝しますが、彼が提案したよりもはるかに優れた問題解決方法があります。

apt-file がインストールされていることを確認し、次のコマンドを実行します

(ライブラリタグを ~/.vim/tags/ に保持します):

$ sudo apt-file update
$ apt-file list boost | grep -E -o '/usr/include/.*\.(h|hpp)' | grep -v '/usr/include/boost/typeof/' > ~/.vim/tags/boost-filelist
$ ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/boost -L ~/.vim/tags/boost-filelist

Ubuntu 10.04 と Boost 1.40 にアップグレードしました。これでこのソリューションをテストしましたが、私が知る限り、どの Boost バージョンでも動作するはずです。

4

4 に答える 4

10

この投稿が少し古いことは知っていますが、同じ問題に遭遇しました。もう少し調べてみたところ、boost の 1 つのフォルダーが問題を引き起こしているようです: typeof。私はブースト 1.37 を使用しており、タグ ファイルは 1.5G で、typeof はその 1.4G でした。そのため、そのディレクトリを含めずにタグファイルを作成したところ、結果のサイズは70Mになりました。スペースを使い果たすことなくソートすることさえできました:)ブーストの新しいバージョンでは、大きすぎる他のプロジェクトである可能性があると思いますが、私が見つけた一般的な解決策はこれです...

  1. 各ブースト フォルダーのタグ ファイルを個別に生成します。単純な bash for ループでこれを実行できるはずです。
  2. どれが大きすぎるか見てください。
  3. これらの大きなディレクトリを除外して、新しい単一のタグ ファイルを作成するか、大きすぎるものを削除するだけで、タグ ファイルを分離したままにします。

これは私が使用したスクリプトです(コメントから取得):

for i in $(find -maxdepth 1 -type d | grep -v '^\.$' | sed 's/\.\///' ); do
    echo $i;
    ctags -f ~/tmp_tags/$i.tags -R --c++-kinds=+p --fields=+iaS --extra=+q --languages=c++ --sort=foldcase $i;
done

お役に立てれば。

于 2010-10-07T15:03:41.960 に答える
8

オプションを使用する

--sort=foldcase

これにより、タグの検索が高速になります。

ctagsの man ページからの引用: ctags readtags ライブラリ、または Vim バージョン 6.2 以降 (「set ignorecase」を使用)。このオプションは、最初のファイル名の前に指定する必要があります。

于 2010-05-13T13:04:23.363 に答える