Вкратце

В данной заметке я приведу свой текущий ~/.vimrc, настраивающий как общее поведение самого редактора vim/gvim (для редактирования любого текста), так и дополнительный функционал для разработки программ на C/C++. Сам по себе vim “из коробки” отлично подходит для редактирования кода, однако несколькими дополнительными модулями из данного текстового редактора можно сделать мощнейшую среду разработки (IDE) промышленного класса. Менеджер модулей vim-plug автоматически скачивает и обновляет плагины, поэтому для воспроизведения всей моей IDE фактически потребуется лишь один файл ~/.vimrc

Возможности

В дополнение к стандартным функциям vim предлагаемая конфигурация даёт следующие возможности:

  • удаление меню и прочего GUI из gvim
  • приятная тёмная цветовая схема и подсветка кода
  • нижняя статусная панель с полезной информацией о файле и режиме
  • быстрое перемещение между вкладками vim (по tn, th и tl)
  • полностью динамическое автодополнение кода
  • проверка синтаксиса “на лету”
  • автокомментарии в коде
  • дерево файлов проекта
  • автоматические скобки, кавычки и т.п.
  • автоматические блоки кода по нажатию после {
  • автоматические “#pragma once” в новых H-файлах
  • автоматические тэги (ctags) для всех файлов, с которыми вы работаете
  • подсветка тэгов (существенно расширяет стандартную, статичную подсветку синтаксиса)
  • браузер классов

Скриншот

Screenshot

Конфигурация

:set guioptions=

set nocompatible
filetype off
set number
set nowrap
set showmode
set tw=80
set smartcase
set smarttab
set smartindent
set nocindent
set autoindent
set softtabstop=2
set shiftwidth=2
set expandtab
set incsearch
set hidden
set mouse=a
set history=1000

" GUI
set lines=900 columns=1600
set background=dark
set guicursor+=a:blinkon0
colorscheme badwolf
set guifont=Hack\ 15
set completeopt=longest,menuone " ,noinsert


" PLUGINS
call plug#begin('~/.vim/bundle')

Plug 'prabirshrestha/async.vim'
Plug 'Valloric/YouCompleteMe'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/nerdcommenter'
Plug 'Raimondi/delimitMate'
Plug 'majutsushi/tagbar'
Plug 'xolox/vim-misc'
Plug 'xolox/vim-easytags'

" All of your Plugins must be added before the following line
call plug#end()
filetype plugin indent on


" NERDTree config
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
map <Leader>n :NERDTreeToggle<CR>

" C/C++ pragma guard autoinsert
function! s:insert_gates()
  execute "normal! i#pragma once"
  execute "normal! o"
endfunction
autocmd BufNewFile *.{h,hh} call <SID>insert_gates()

" tabs navigation
nnoremap th :tabprev<CR>
nnoremap tl :tabnext<CR>
nnoremap tn :tabnew<CR>
nnoremap td :tabclose<CR>

" code blocks with {+<CR> 
inoremap {<CR> {<CR>}<C-o>O

" auto c-tags (generation, coloruring, etc.)
let g:easytags_async=1

" file tag browser hotkey
nmap <F8> :TagbarOpenAutoClose<CR>