Para obter uma experiência de desenvolvimento moderna em C e C++ utilizando o Vim ou Neovim, o coc.nvim (Conquer of Completion) é uma das ferramentas mais robustas. Ele atua como um cliente de Language Server Protocol (LSP), permitindo funcionalidades como autocompletar, navegação de código e diagnóstico de erros.
1. Preparação do Ambiente
Antes de instalar o plugin, é necessário garantir que o ecossistema Node.js e o compilador/ferramenta de análise de código estejam presentes no sistema. Abaixo, o procedimanto para distribuições baseadas em Ubuntu/Debian:
# Instalação do compilador e do servidor de linguagem para C/C++
sudo apt update
sudo apt install clangd
# Instalação do Node.js (necessário para o coc.nvim)
# Recomenda-se utilizar uma versão estável recente
sudo apt install npm
sudo npm install -g n
sudo n stable
# Instalação do gerenciador de pacotes Yarn
sudo npm install -g yarn
2. Instalação do Plugin
Dependendo do gerenciador de plugins que você utiliza no seu .vimrc ou init.vim, adicione a linha correspondente:
Utilizando Vim-Plug
" É recomendável utilizar a branch 'release' para estabilidade
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Utilizando Vundle
Plugin 'neoclide/coc.nvim'
Após adicionar a linha, reinicie o editor e execute o comendo de instalação:
:PlugInstall
" ou, se usar Vundle:
:PluginInstall
3. Configurando o Suporte para C/C++
Com o coc.nvim instalado, você deve adicionar a extensão específica para o protocolo LSP do C/C++ (clangd):
:CocInstall coc-clangd
4. Resolução de Problemas
Versão do Editor Desatualizada
O coc.nvim exige versões recentes do Vim (8.1+) ou Neovim (0.4+). Se o seu repositório padrão estiver defasado, utilize os PPAs oficiais:
# Para Neovim
sudo add-apt-repository ppa:neovim-ppa/stable
sudo apt update
sudo apt install neovim
# Para Vim
sudo add-apt-repository ppa:jonathonf/vim
sudo apt update
sudo apt install vim
Erro de Build (index.js não encontrado)
Se encontrar erros relacionados à falta de dependências compiladas, navegue até o diretório do plugin e force a compilação manual:
cd ~/.vim/plugged/coc.nvim # O caminho pode variar conforme seu gerenciador
yarn install
yarn build
5. Configuração Personalizada no .vimrc
Abaixo, uma configuração otimizada para melhorar o fluxo de trabalho, incluindo atalhos para navegação e formatação:
" Lista de extensões que serão instaladas automaticamente
let g:coc_global_extensions = [
\ 'coc-clangd',
\ 'coc-json',
\ 'coc-snippets',
\ 'coc-vimlsp'
\ ]
" Melhora a experiência visual do menu de sugestões
set pumheight=12
set updatetime=300
set signcolumn=yes
" Mapeamento para confirmar a seleção do autocomplete com Enter (CR)
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
\: "\<c-g>u\<cr>\<c-r>=coc#on_enter()\<cr>"
" Atalhos para navegação de código
nmap <silent> gd <plug>(coc-definition)
nmap <silent> gy <plug>(coc-type-definition)
nmap <silent> gi <plug>(coc-implementation)
nmap <silent> gr <plug>(coc-references)
" Atalhos para diagnósticos (erros e avisos)
nmap <silent> [g <plug>(coc-diagnostic-prev)
nmap <silent> ]g <plug>(coc-diagnostic-next)
" Formatação de código
xmap <leader>f <plug>(coc-format-selected)
nmap <leader>f <plug>(coc-format-selected)
" Exibir documentação em um popup flutuante
nnoremap <silent> K :call VerDocumentacao()<cr>
function! VerDocumentacao()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
elseif (coc#rpc#ready())
call CocActionAsync('doHover')
else
execute '!' . &keywordprg . " " . expand('<cword>')
endif
endfunction
" Destacar símbolos sob o cursor
autocmd CursorHold * silent call CocActionAsync('highlight')
</cword></cword></cr></silent></plug></leader></plug></leader></plug></silent></plug></silent></plug></silent></plug></silent></plug></silent></plug></silent></cr></c-r></cr></c-g></cr></expr></silent>