# CTags für Vim bauen / Omnicpp: Wie?

## musv

Guten Morgen, 

momentan bastel ich gerade daran, Vim in eine brauchbare IDE umzuwandeln. Dazu hab ich mir Omnicpp installiert. Meine /etc/vim/vimrc.local sieht so aus (Omnicpp-Bereich):

```
set nocp         "VI-Kompatbilität deaktivieren

set number         "Zeilennummern anzeigen

syntax on         "Syntax-Highlighting Defaultfarben

" --- OmniCppComplete ---

" auto close options when exiting insert mode

 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif

 set completeopt=menu,menuone,longest,preview

 let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files

 let OmniCpp_GlobalScopeSearch = 1

 let OmniCpp_ShowAccess = 1

 let OmniCpp_ShowPrototypeInAbbr = 1 "Funktionsparameter anzeigen

 let OmniCpp_MayCompleteDot = 1 " autocomplete with .

 let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->

 let OmniCpp_MayCompleteScope = 1 " autocomplete with ::

 let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)

" Tags einbinden

set tags+=/usr/share/vim/tags/tags
```

So, und jetzt geht's daran, die Tags zu bauen. Das gestaltet sich etwas schwieriger. Der Befehl ist dafür:

```
ctags –R --c++-kinds=+p --fields=+iaS --extra=+q /usr/include/qt4 qt4
```

Will man die Tags für c++ haben, wird man immer darauf verwiesen, sich das stdc++-Paket zu ziehen und daraus die ctags zu bauen. 

```
* sys-libs/libstdc++-v3

     Available versions:  (5) 3.3.6 (~)3.3.6-r1

   {{multilib nls}}

     Homepage:            http://gcc.gnu.org/libstdc++/

     Description:         Compatibility package for running binaries linked against a pre gcc 3.4 libstdc++

* sys-libs/libstdc++-v3-bin

     Available versions:  *3.3.6^s

     Homepage:            http://gcc.gnu.org/libstdc++/

     Description:         Compatibility package for running binaries linked against a pre gcc 3.4 libstdc++

* virtual/libstdc++

     Available versions:  (3.3) 3.3

     Description:         Virtual for the GNU Standard C++ Library for <gcc-3.4
```

Ich wollte schon gern die ctags für gcc 4.7 haben, die ja zweifelsohne irgendwo in /usr/include enthalten sein müssen. 

Ok, dann kam der Brute-Force-Ansatz:

```
ctags –R --c++-kinds=+p --fields=+iaS --extra=+q /usr/include/ tags
```

Das erzeugt mir ein 3,8GB großes Tag-File mit allen Tags in /usr/include. Funktioniert auch prächtig. Sobald ich:

```
std::
```

eintipp, wird mir im Vim eine ewig lange Auswahlliste angefangen mit Boost vorgegeben. Tipp ich dann cou ein, seh ich keine Ergebnisse mehr. std::cout scheint es nicht zu geben. Nein, das wurde nicht aus c++ entfernt. 

Lange Rede, kurzer Sinn. Wie kann ich die ctags für c++ aus meiner aktuellen Gentoo-Installation generieren?

----------

## firefly

Der GCC liefert eine libstdc++ mit. Die pakete im portage sind nur compatibility pakete für progamme, welche mit dem  gcc < 4.x compiliert wurden.

die liegen nicht unter /usr/include, sondern unter

```
/usr/lib64/gcc/x86_64-pc-linux-gnu/<version>/include
```

was ein qlist gcc:4.7 dir verraten hätte...

----------

## musv

Hast natürlich recht. Hab ich dann auch gemacht. War trotzdem nicht der Bringer, denn da wurde dann auch java mit eingebunden, da ich gcc mit dem Java-Useflag compiliert hab. Ein paar andere Sachen waren ebenfalls noch mit drin, die mir nicht zugesagt haben. 

Ich hab dann omnicppcomplete komplett runtergeschmissen und clang_complete + Supertab installiert. Sieht nach den ersten Tests nach dem aus, was ich gesucht hab.

----------

