Como Configurar seu VIM para C/C++

Esses procedimentos também servirão para outras linguagens de programação .


Como Configurar seu VIM para C/C++

Nesse vídeos instalamos plugins para:

Os procedimentos foram realizados no Ubuntu Cinnamon

Assista ao Vídeo

Todas as configurações utilizadas no vídeo

Muitas coisas servirão para quaisquer outras Linguagens de Programação

01. Atualize seu sistema:

sudo apt update && \
  sudo apt upgrade -y && \
  sudo apt clean && \
  sudo apt autoclean && \
  sudo apt autoremove -y

02. Instalar o Vim, curl e Git

sudo apt install vim curl git wget

03. Instale o Vim Plug

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  • Adicione o código ao ~/.vimrc
vim ~/.vimrc

E dentro do arquivo:

O plugin https://github.com/terroo/vim-simple-emoji servirá pra testar se está tudo funcionando.

call plug#begin('~/.vim/plugged')
" Aqui vão os pluggins

" Plugin de Exemplo inicial
Plug 'terroo/vim-simple-emoji'

call plug#end()

Feche o ~/.vimrc e abra novamente e em seguida rode:

:PlugInstall

Teste pra ver se está funcionando:

vim teste.md

Digite: :smile: e dê espaço em seguida, se aparecer a carinha: 😃 é porque está tudo certo! Ou rode: :ShowEmoji .


04. Instale fonts!

git clone https://github.com/terroo/fonts
cd fonts
mv fonts ~/.local/share/fonts
cd && rm -rf fonts
fc-cache -fv

Perceba que :ShowEmoji já estará diferente. Altere a fonte para Jetbrains Mono e também para cursor I-Beam.


05. Instale um tema de cores vim ~/.vimrc

https://github.com/Matsuuu/pinkmare

Plug 'matsuuu/pinkmare'

Feche o Vim abra de novo e rode: :PlugInstall . Após completada a instalação adicione ao seu ~/.vimrc:

colorscheme pinkmare
" OPCIONAL: hi! MatchParen cterm=NONE,bold gui=NONE,bold guibg=NONE guifg=#FFFF00

06. Linhas adicionais e opcionais da minha preferência

set nu!
set mouse=a
set title
set cursorline
set encoding=utf-8 " Importante para o YCM

07. Mapeamentos interessantes

map q :quit<CR>
map <C-s> :write<CR> "echo 'stty -ixon' >> ~/.bashrc && exec $SHELL'

08. Instalar o YouCompleMe

https://github.com/ycm-core/YouCompleteMe

  • Antes instale as dependências
sudo apt install gcc g++ cmake make build-essential vim-nox python3-dev
  • Adicione esse plugin: ycm-core/YouCompleteMe, :PlugInstall
  • Complete a instalação:
cd .vim/plugged/YouCompleteMe/
python3 install.py --clangd-completer # Somente C/C++
# python3 install.py --all # precisa do Go e NPM:
# sudo apt install golang npm

Adicione ao seu ~/.vim/.ycm_extra_conf.py :

'-I/usr/include/gtkmm-3.0',
'-I./',
'-I/usr/include',

09. Testar e configurar

vim teste.cpp

Ao digitar #include <iostream> e #include <vector> ele irá autocompletar!

  • Caso não esteja adicione essa linha ao seu ~/.vimrc
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'
  • Removendo a janela suspensa quando usa o autocomplete, adicione essa linha:
set completeopt-=preview
  • Para desabilitar os diagnósticos em tempo de escrita:
let g:ycm_show_diagnostics_ui = 0
  • Compilando: :terminal e g++ teste.cpp, pra sair do terminal: exit .

10. Adicionando o Auto-pairs

https://github.com/jiangmiao/auto-pairs

Plug 'jiangmiao/auto-pairs'

11. Instalando o Servidor de Linguagens ccls

https://github.com/MaskRay/ccls

sudo apt install ccls

Copie esse código abaixo e cole no seu .vimrc:

let g:ycm_language_server =
  \ [{
  \   'name': 'ccls',
  \   'cmdline': [ 'ccls' ],
  \   'filetypes': [ 'c', 'cpp', 'cuda', 'objc', 'objcpp' ],
  \   'project_root_files': [ '.ccls-root', 'compile_commands.json' ]
  \ }]

Mude o cuda … para: cc, h e hpp

  • Abra o o teste.cpp e pare o mouse sobre o std::cout e agurade 4 segundos e verá o ccls funcionando. Perceba que ao autocompletar agora ele adiciona automaticamente um cabeçalho, se não quiser que isso aconteça, adicione essa linha ao seu .vimrc:
let g:ycm_clangd_args=['--header-insertion=never']

E teste!


12. Adicionando o UtilSnips

https://github.com/SirVer/ultisnips e https://github.com/ervandew/supertab

Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'ervandew/supertab'

Para funcionar adicione esse código:

let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"

Teste com teste.cpp e main<TAB> . Se quiser edite os snippets(.vim/plugged/vim-snippets/UltiSnips/cpp.snippets)


Bônus:

  • 1. Vim-airline
:AirlineTheme
:help AirLineTheme

Undefined variable: g:airline_symbols : let g:airline_symbols = {}

let extensao = expand('%:e')

if( extensao == "cpp" || extensao == "cc" || extensao == "h" || extensao == "hpp" ) 
Plug 'ycm-core/YouCompleteMe'
else
Plug 'zxqfl/tabnine-vim'
endif

ARQUIVO FINAL:

let extensao = expand('%:e')

call plug#begin('~/.vim/plugged')
" Plugin de Exemplo inicial
Plug 'terroo/vim-simple-emoji'

" Aqui vão os plugins
Plug 'matsuuu/pinkmare'
if( extensao == "cpp" || extensao == "cc" || extensao == "h" || extensao == "hpp" ) 
Plug 'ycm-core/YouCompleteMe'
else
Plug 'zxqfl/tabnine-vim'
endif
Plug 'jiangmiao/auto-pairs'
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'ervandew/supertab'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'dracula/vim', { 'as': 'dracula' }

call plug#end()

" TEMA DE CORES
colorscheme pinkmare
hi! MatchParen cterm=NONE,bold gui=NONE,bold guibg=NONE guifg=#FFFF00

" CONFIGS RECOMENDADAS
set nu!
set mouse=a
set title
set cursorline

" MAPEAMENTOS LEGAIS
map q :quit<CR>
map <C-s> :w<CR>

" YOUCOMPLETEME
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'
set completeopt-=preview
let g:ycm_show_diagnostics_ui = 0
let g:ycm_clangd_args=['--header-insertion=never']
let g:ycm_language_server =
  \ [{
  \   'name': 'ccls',
  \   'cmdline': [ 'ccls' ],
  \   'filetypes': [ 'c', 'cpp', 'cc', 'h', 'hpp' ],
  \   'project_root_files': [ '.ccls-root', 'compile_commands.json' ]
  \ }]


" UTILSNIPS
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"

" VIM AIRLINE
let g:airline_theme = 'dracula'
" powerline symbols
let g:airline_left_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_right_alt_sep = ''
let g:airline_symbols = {}
let g:airline_symbols.branch = ''
let g:airline_symbols.readonly = ''
let g:airline_symbols.linenr = '☰ '
let g:airline_symbols.maxlinenr = '  '
let g:airline_symbols.dirty='⚡'

vim cpp linguagemc


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!


caso queira entrar em contato conosco, envie-nos um e-mail.