logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

Vim mais amigável para usuários de Visual Studio

Quando eu uso Linux, eu uso vim+ctags+omnicppcomplete+taglist, cmake para build e cgdb para debug. Não é integrado como o Visual Studio, mas funciona bem e tem até suas vantagens. Não tenho a pretensão de ensinar vim aqui, isso levaria muuuitos posts. Ou seja, se isso tudo é novidade para você, leia o tutorial do vim, leia a documentação do ctags, cmake, e do omnicppcomplete antes.

Primeiro, meu vim tem algumas adaptações para ficar com a teclas de atalho do Visual Studio para compilar. Isso vai no meu .vimrc

"
" Visual C++ 6 like keys to build
"
:nmap <F7> :wa \| :make<CR> " build
:nmap <F8> :cope \| :cnext<CR> " next error
:nmap <F4> :TlistToggle<CR> "
:nmap <F12> <C-]>
:nmap <F6> :bnext<CR>

Para autocomplete (Intellisense no linguajar Microsoft), eu uso ctags e omnicppcomplete. O ctags monta o "banco de dados de coisas para autocomplete", análogo ao arquivo ncb do Visual Studio. O próprio vim sabe usar um arquivo de tags, mas o omnicppcomplete torna e experiência muito melhor.

Eu faço algumas mudanças na configuração do omnicppcomplete para melhor a experiência:

"omnicppcomplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
let OmniCpp_MayCompleteDot = 1 " autocomplete after .
let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]

Você pode simplesmente fazer um banco de dados de ctags com STL, Boost e seus projetos. Isso vai fazer com que seu vim pare por 20 segundo cada vez que você tentar completar alguma coisa. Para resolver isso, eu fiz um shell script que monta um arquivos tags somente com o que é usado no seu projeto. É só rodar isso na pasta do projeto. Fazer isso funcionar em um projeto com várias pastas fica como exercício para o leitor :-)

#!/bin/bash

DEPFILE="dependencies"

if [ -e "$DEPFILE" ]; then
        rm "$DEPFILE"
fi

#
# find all files dependencies
#
for x in *.cpp
do
         echo dependencies for "$x"...
         gcc -E -M -H -I/usr/local/include/boost/ "$x" > /dev/null 2>> "$DEPFILE"
done

if [ -e global_dep ]; then
        rm global_dep
fi

#
# summarize
#
echo summarizing...
sed "s/^\.* \(.*\)/\1/g" "$DEPFILE" | 
grep -v "Multiple include guards may be useful for" | sort | uniq > global_dep

if [ -e tags ]; then
    rm tags
fi

echo generating tags...
xargs --arg-file=global_dep ctags --append --c++-kinds=+p --fields=+iaS --extra=+q

Funciona assim: uso o gcc -H para enumerar os headers usados por todos os cpps. Jogamos tudo isso para um arquivo dependencies e filtramos os duplicados com "sort | uniq". Depois todos os headers estarão no arquivo global_dep, e o xrags resolve o problema de gerar tags para todos os arquivos encontrados. Lembre-se que meus conhecimento de shell script são suficientes somente para subsistência e deve haver um modo melhor de fazer isso. Aceito sugestões nos comentários. :-)

Links:


Em 22/02/2011 15:26, por Rodrigo Strauss


  
 
 
Comentários
Robson Peixoto | em 22/02/2011 | #
Eu recomendo fortemente o uso do http://www.vim.org/scripts/script.php?script_id=3302 .

Depois que eu comecei a usá-lo, eu abandonei a solução ctags+omnicppcompletion
Fábio | em 16/04/2011 | #
Em que configuração e SO foi retirada essa tela?
Rodrigo Strauss | website | em 18/04/2011 | #
Ubuntu Server 10.x
Fábio | em 30/04/2011 | #
Que livros você recomendaria para quem está se iniciando em programação C/C++ no mundo Linux, além do The Unix Programming Environment, há livros equivalentes como Windows Internals, Advanced Windows e similares para um bom começo? ;-)
Rodrigo Strauss | website | em 02/05/2011 | #
Eu conheço alguns livros, mas nem todos eu li inteiros, então não sei se posso recomendar. Não se são atualizados, li faz bastante tempo.

Undestanding Linux Kernel: http://www.amazon.com/Understanding-Linux-Kernel-Third-Danie...

Na DeveloperWorks da IBM tem artigos bons: http://www.ibm.com/developerworks/

Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::