Простая и комфортная разработка на C++ в vim
Вкратце⌗
В данной заметке я приведу свой текущий ~/.vimrc
, настраивающий как общее
поведение самого редактора vim/gvim (для редактирования любого текста), так и
дополнительный функционал для разработки программ на C/C++. Сам по себе vim
“из коробки” отлично подходит для редактирования кода, однако несколькими
дополнительными модулями из данного текстового редактора можно сделать мощнейшую
среду разработки (IDE) промышленного класса. Менеджер модулей vim-plug
автоматически скачивает и обновляет плагины, поэтому для воспроизведения всей моей
IDE фактически потребуется лишь один файл ~/.vimrc
Возможности⌗
В дополнение к стандартным функциям vim предлагаемая конфигурация даёт следующие возможности:
- удаление меню и прочего GUI из gvim
- приятная тёмная цветовая схема и подсветка кода
- нижняя статусная панель с полезной информацией о файле и режиме
- быстрое перемещение между вкладками vim (по
tn
,th
иtl
) - полностью динамическое автодополнение кода
- проверка синтаксиса “на лету”
- автокомментарии в коде
- дерево файлов проекта
- автоматические скобки, кавычки и т.п.
- автоматические блоки кода по нажатию после
{
- автоматические “#pragma once” в новых H-файлах
- автоматические тэги (ctags) для всех файлов, с которыми вы работаете
- подсветка тэгов (существенно расширяет стандартную, статичную подсветку синтаксиса)
- браузер классов
Скриншот⌗
Конфигурация⌗
: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>
ЧТАТ ДРУГ ЗПСИ