Este tutorial se e endereça as pessoas que utilizam Vim no windows ou Linux. Aqui, eu tentarei orientar o tutorial para aqueles que possuem Linux.
A autocopletação é algo bem familiar pata o Linux, pois ela é utilizada com freqüência, regularmente, e tipicamente em um console. No entanto, a única autocompletação que propõe Vim não considera a semântica da linguagem na qual se codifica.
Com efeito, quando se pressiona Ctrl N (Ctrl P) no momento em que se está digitando uma palavra, Vim procura no arquivo uma palavra que começa com as mesmas letras. Infelizmente, a senha proposta não tem necessariamente um sentido, pois a autocompletação não considera aquilo que simboliza a palavra. Assim, Vim será, por exemplo, levado a propor uma "palavra" que corresponde à um tipo lá onde um método é esperado.
class plop(){ protected: int plopons; public: plop(){} void plopez(){} }; int main(){ plop p; p. // <-- Ctrl P proporá sucessivamente : plopez, plop... enquanto que é na verdade plopons return 0; }
Para que o aspecto « semântico » seja considerado, vamos utilizar um plugin Vim baseado em ctags. Ctags permite de « referenciar » certos símbolos (tipos, funções, classes) para diferentes linguagens, das quais a C++.
Quando ctags examina uma arborescência de arquivos fonte, aquele cria um arquivo (chamado tags) que referencia cada símbolo que figura ali.
Começa-se por instalar ctags. Por exemplo, na debian ou uma distribuição baseada na Debian (ubuntu, xandros...) :
sudo aptitude update sudo aptitude safe-upgrade sudo aptitude install exuberant-ctags
Recupera-se igualmente o plugin Vim de autocompletação
Coloca-se tudo o que concerne a autocompletação em ~/.vim :
mkdir -p ~/.vim/tags mv omnicpp*zip ~/.vim cd ~/.vim unzip omnicpp*zip cd -
Ctags é capaz de examinar sem problemas os headers das livrarias QT, OpenGL, SDL. No entanto, para a STL, é preciso recuperar headers "simplificados" ICI
Descompacta-se o arquivo e cria-se os tags da STL :
tar xjvf cpp_src.tar.bz2 ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ cpp_src && mv tags ~/.vim/tags/stl
Agora, gera-se os tags para as livrarias instaladas (a adaptar se asbibliotecas são instaladas em outro lugar). Por exemplo, para as livrarias OpenGL, SDL et QT, basta Digitar os três seguintes comandos :
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/GL/ && mv tags ~/.vim/tags/gl ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/SDL/ && mv tags ~/.vim/tags/sdl ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/qt4/ && mv tags ~/.vim/tags/qt4
Agora, é preciso dizer a vim de trocar o plugin e os diferentes arquivos de tags. Para tanto, basta adicionar o fim do arquivo ~/.vimrc as linhas abaixo:
" prérequis tags set nocp filetype plugin on " configure tags - add additional tags here or comment out not-used ones set tags+=~/.vim/tags/stl set tags+=~/.vim/tags/gl set tags+=~/.vim/tags/sdl set tags+=~/.vim/tags/qt4 " build tags of your own project with CTRL+F12 "map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> noremap <F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr> inoremap <F12> <Esc>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr> " OmniCppComplete let OmniCpp_NamespaceSearch = 1 let OmniCpp_GlobalScopeSearch = 1 let OmniCpp_ShowAccess = 1 let OmniCpp_MayCompleteDot = 1 let OmniCpp_MayCompleteArrow = 1 let OmniCpp_MayCompleteScope = 1 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] " automatically open and close the popup menu / preview window au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif set completeopt=menuone,menu,longest,preview
Se, somente alguns arquivos tags foram gerados, comentar os outros e adicionar o caractere « no início da linha. Por exemplo, se se gera ~/.vim/tags/gl et ~/.vim/tags/sdl :
set tags+=~/.vim/tags/stl "set tags+=~/.vim/tags/gl "set tags+=~/.vim/tags/sdl set tags+=~/.vim/tags/qt4
falta somnete salvar este arquivo e (re)lançar vim para que este considere as modificações feitas no ~/.vimrc.
Tudo aquilo que foi tagado previamente (quer dizer neste tutorial os tags da STL, de QT, de SDL, e de OpenGL) já está acessível na autocompletação. Basta pressionar Ctrl P ou Ctrj N. Depois que a lista aparecer, pode-se utilizar as flechas para selecionar a boa proposição e Pressionar Entre.
Mas, não est terminado. É preciso regenerar os tags de símbolos (variáveis, funções, tipos...) específicos ou projeto que se desenvolve. Para tanto, é preciso ainda gerar um arquivo de tags. E é claro, é preciso refrescar este arquivo a cada vez que for adicionado, suprimido ou modificado o símbolo do projeto para que este seja atualizado.
Como acontece freqüentemente, é recomendado mapear uma tecla para desencadear um passe de ctags. No exemplo do arquivo ~/.vimrc que eu deu, isto está assegurado pela tecla F12.
https://vim.fandom.com/wiki/C%2B%2B_code_completion
https://www.vim.org/scripts/script.php?script_id=1520
https://www.vim.org/scripts/script.php?script_id=2358
Tradução feita por Ana Spadari