De autocompletion C / C + + in vim

Autocompletion is een geweldige functie voor programmeurs die aan verschillende soorten programmeertalen werken, zoals de C / C + + -talen. Vim-editor biedt deze functie onder Windows of Linux . Het automatisch aanvullen van C / C + + in Vim zoekt naar woorden die zijn ingetypt uit een bestand waarin eerder de tags zijn opgeslagen . De gebruiker, met behulp van de hardware-component van het systeem, dwz het toetsenbord, zal een sleutel configureren om het proces van het doorzoeken van de opgeslagen tags te starten. Het zou echter verstandig zijn om een ​​oogje open te houden voor woorden die nergens op slaan.

  • Installatie
  • Configuratie
  • Gebruik
  • Links

Deze tutorial is bedoeld voor mensen met Vim op Linux. Automatisch aanvullen is een bekende functie voor Linux-gebruikers, maar het kan soms woorden suggereren die in de context niet logisch zijn. Dit kan frustrerend zijn bij het programmeren, omdat automatisch aanvullen bijvoorbeeld een type kan suggereren wanneer op dat moment in de code een methode wordt verwacht.

 class plop () {protected: int plopons; public: plop () {} void plopez () {}}; int main () {plop p; p. // <- Ctrl P proposera successivement: plopez, plop ... alors que c'est forcement plopons return 0; } 

Een plug-in, gebaseerd op ctags Met Vim kunt u een intelligentere Auto-completering maken die rekening kan houden met de context waarin een woord wordt gebruikt.

Installatie

We beginnen met het installeren van ctags. Bijvoorbeeld, onder Debian of Debian gebaseerde distributies (ubuntu, xandros etc.):

 sudo aptitude update sudo aptitude safe-upgrade sudo aptitude install exuberant-ctags 

Het herstelt ook de Vim-plug-in voor automatisch aanvullen:

//www.vim.org/scripts/script.php?script_id=1520

We zullen alles doen wat betreft zelf-voltooiing in ~ /. Vim:

 mkdir -p ~ / .vim / tags mv omnicpp * zip ~ / .vim cd ~ / .vim unzip omnicpp * zip cd - 

Ctags kan het probleem van headers QT, OpenGL, SDL beschouwen. Voor de STL moet u hier de headers "simple" ophalen:

//www.vim.org/scripts/script.php?script_id=2358

Het pakt het archief uit en maakt tags van de STL:

 tar xjvf cpp_src.tar.bz2 ctags -R --c ++ - soorten = + p --fields = + iaS --extra = + q --taaluage-force = C ++ cpp_src && mv tags ~ / .vim / tags / stl 

Nu genereert het de tags voor de geïnstalleerde bibliotheken (aan te passen als de bibliotheken elders zijn geïnstalleerd). In de bibliotheken OpenGL, SDL en QT typt u bijvoorbeeld de volgende drie opdrachten:

c

 tags -R --c ++ - soorten = + p --fields = + iaS --extra = + q --taaluage-force = C ++ / usr / include / GL / && mv tags ~ / .vim / tags / gl ctags - R --c ++ - soorten = + p --fields = + iaS --extra = + q --taaluage-force = C ++ / usr / include / SDL / && mv-tags ~ / .vim / tags / sdl ctags -R - -c ++ - soorten = + p --fields = + iaS --extra = + q - taaluage-force = C ++ / usr / include / qt4 / && mv tags ~ / .vim / tags / qt4 

Configuratie

Nu moeten we vim vertellen om de plugin-bestanden en de verschillende tags te laden. Om dit te doen, voegt u gewoon toe aan het einde van het bestand ~ /. Vimrc de volgende regels:

 "prérequis tags instellen nocp bestandstype plugin op" tags configureren - voeg hier extra tags toe of becommentarieer niet-gebruikte tags set-tags + = ~ / .vim / tags / stl set tags + = ~ / .vim / tags / gl set tags + = ~ / .vim / tags / sdl set tags + = ~ / .vim / tags / qt4 "bouw tags van je eigen project met CTRL + F12" map:! ctags -R --c ++ - soorten = + p --fields = + iaS - -extra = + q. noremap:! ctags -R --c ++ - species = + p --fields = + iaS --extra = + q. inoremap:! ctags -R --c ++ - soorten = + p --fields = + iaS --extra = + q. "OmniCppComplete laat OmniCpp_NamespaceSearch = 1 laten OmniCpp_GlobalScopeSearch = 1 laten OmniCpp_ShowAccess = 1 laten OmniCpp_MayCompleteDot = 1 laten OmniCpp_MayCompleteArrow = 1 laten OmniCpp_MayCompleteScope = 1 laten OmniCpp_DefaultNamespaces = [" std ", " _GLIBCXX_STD "]" openen en sluiten automatisch het pop-upmenu / voorbeeldvenster au CursorMovedI, InsertLeave * if pumvisible () == 0 | silent! pclose | endif set completeopt = menuone, menu, langste, preview 

Als er voor sommige bestanden alleen tags werden gegenereerd, reageer dan op de andere door toe te voegen aan het begin van de regel. Bijvoorbeeld als we ~ /.vim/tags/gl en ~ / .vim / tags / sdl niet hebben gegenereerd:

 set tags + = ~ / .vim / tags / stl "set tags + = ~ / .vim / tags / gl" set tags + = ~ / .vim / tags / sdl set tags + = ~ / .vim / tags / qt4 

We moeten alleen het bestand opslaan en (opnieuw) starten met vim, zodat ze de wijzigingen weergeven in ~ /. Vimrc.

Gebruik

Alles dat eerder is getagd (dwz in deze tutorial-tags STL, QT, SDL en OpenGL) is al beschikbaar in de automatische aanvulling. Druk eenvoudig op ctrl p of n. Zodra de lijst verschijnt, kunt u de pijlen gebruiken om het goede voorstel te markeren en op Enter drukken.

Het is echter nog niet helemaal klaar. Het moet de tags van symbolen (variabelen, functies, typen ...) die specifiek zijn voor het project dat wordt ontwikkeld, regenereren. Dit zal opnieuw een tagsbestand genereren. En natuurlijk, het zal het bestand verversen elke keer dat je een symbool van het project toevoegt, verwijdert of wijzigt zodat het actueel is.

Zoals gebruikelijk is, wordt aanbevolen een toets op het toetsenbord in kaart te brengen om een ​​proces van ctags te activeren. In het voorbeeldbestand ~ / .Vimrc dat ik gaf, wordt dit gewaarborgd door op F12 te drukken.

Links

//vim.wikia.com/wiki/C++_code_completion

//www.vim.org/scripts/script.php?script_id=1520

//www.vim.org/scripts/script.php?script_id=2358

Vorige Artikel Volgende Artikel

Top Tips