Rodrigo Strauss :: Blog
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





Eu recomendo fortemente o uso do http://www.vim.org/scripts/script.html?script_id=3302 .
Depois que eu comecei a usá-lo, eu abandonei a solução ctags+omnicppcompletion