Наверняка вы уже слышали, что Vim - это мощнейший текстовый редактор не уступающий в функционале и удобстве большим тяжеловесным аналогам, наподобие Eclipse или XCode. Вот и я слышал, однако в базовой комплектации Vim умеет очень мало, подсвечивать синтаксис, расставлять отступы и подсказывать код на основе тэгов (но это не совсем то автодополнение которое мне бы нравилось).
В этой статье я бы хотел рассказать, как Vim можно превратить в полноценную IDE для C/C++ с поддержкой проектов, автодополнения кода, поиском и подсвечиванием ошибок и генерацией по шаблонам.
Предполагается, что у вас есть базовые умения в работе с Vim'ом.
Vim легко расширается при помощи плагинов, собственно с их помощью я и собираюсь превратить Vim в IDE.
Для начала немного расскажу о том, какие и для чего плагины планируется использовать:
На этом можно было бы и закончить статью, но просто установить плагины мало, теперь нужно настроить Vim так, чтобы его было удобно использовать, и не только для разработки на С/C++. Для этого немного изменим свой ~/.vimrc
Первым делом добавим возможность проектам переопределять некоторые праметры, например ширину отступов, заменять ли табуляцию пробелами, кодировку т.д.
Теперь настроим наше дерево проектов, напоминаю, что для этого используется плагин NERDTree:
На этом все. Скачать получившейся .vimrc можно тут.
В этой статье я бы хотел рассказать, как Vim можно превратить в полноценную IDE для C/C++ с поддержкой проектов, автодополнения кода, поиском и подсвечиванием ошибок и генерацией по шаблонам.
Предполагается, что у вас есть базовые умения в работе с Vim'ом.
Vim легко расширается при помощи плагинов, собственно с их помощью я и собираюсь превратить Vim в IDE.
Для начала немного расскажу о том, какие и для чего плагины планируется использовать:
- Vundle - плагин для управления плагинами (и такое бывает). С его помощью можно ставить плагины просто указывая их имена в ~/.vimrc.
- Ultisnips - генератор кода по шаблонам.
- Clang complete - плагин анализирующий код проекта при помощи Clang и позволяющий сделать дополнять код на основе типов аргументов возвращаемых значений и т.д. Плюс умеет подсвечивать ошибки прямо в редакторе.
- NERD Tree - файловый браузер.
- Скачиваем плагин
- В ~/.vimrc добавляем следующие строчки, можно сразу же добавить нужные нам плагины:
- Запускаем Vim и пишем: :PluginInstall
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
set nocompatible " be improved, required for Vundle filetype off " required for Vundle " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' " User defined plugins Plugin 'SirVer/ultisnips' Plugin 'honza/vim-snippets' Plugin 'scrooloose/nerdtree' Plugin 'Rip-Rip/clang_complete' " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required " " Put your non-Plugin stuff after this line
На этом можно было бы и закончить статью, но просто установить плагины мало, теперь нужно настроить Vim так, чтобы его было удобно использовать, и не только для разработки на С/C++. Для этого немного изменим свой ~/.vimrc
Первым делом добавим возможность проектам переопределять некоторые праметры, например ширину отступов, заменять ли табуляцию пробелами, кодировку т.д.
" Позволим конфигурационным файлам в проекте изменять настройки vim'a " Включим чтение конфигурационных файлов .vimrc в текущей директории set exrc " Запретим опасные команды в локальных .vimrc файлах (эта опция должна идти в вашем " ~/.vimrc после запрещаемых команд, таких как write) set secureТеперь в корень проекта можно положить файл с именем .vimrc и переопределить там некоторые параметры, например textwidth и &path. Теперь давайте настроим параметры форматирования по-умолчанию:
" Отступы пробелами, а не табуляциями set expandtab " Ширина строки 80 символов set textwidth=80 " Ширина табуляции в колонках set ts=2 " Количество пробелов (колонок) одного отступа set shiftwidth=2 " Новая строка будет с тем же отступом, что и предыдущая set autoindent " Умная расстановка отступов (например, отступ при начале нового блока) set smartindentЕщё неплохо было бы все красиво подсветить: синтаксис, номера строк и максимальную ширину столбца:
" Подсвечивать синтаксис syntax on " Указывать номера строк set number " Подсветить максимальную ширину строки let &colorcolumn=&textwidth " Цвет линии - тёмно-серый highlight ColorColumn ctermbg=darkgrayТеперь давайте настроим поиск:
" Игнорировать регистр при поиске set ic " Подсвечивать поиск set hls " Использовать последовательный поиск set isТак же в командном режиме удобно, когда работают bash-подобные подсказки (по нажатию Tab)
" Включаем bash-подобное дополнение командной строки set wildmode=longest:list,fullПо-умолчанию, vim пытается сделать все окна одинакового размера в том числе и панели, так что выключим эту опцию и заодно зададим размер окна по-умолчанию:
" Не делать все окна одинакового размера set noequalalways " Высота окон по-умолчанию 20 строк set winheight=20Зададим кодировку по-умолчанию:
set fileencoding=utf-8Для некоторых типов фалов параметры отличаются от других, например в make-файлах не нужно заменять табуляции пробелами и т.д.
" С/C++ файлы " Расставлять отступы в стиле С autocmd filetype c,cpp set cin " make-файлы " В make-файлах нам не нужно заменять табуляцию пробелами autocmd filetype make set noexpandtab autocmd filetype make set nocin " html-файлы " Не расставлять отступы в стиле С в html файлах autocmd filetype html set noexpandtab autocmd filetype html set nocin autocmd filetype html set textwidth=160 " css-файлы " Не расставлять отступы в стиле C и не заменять табуляцию пробелами autocmd filetype css set nocin autocmd filetype css set noexpandtab " python-файлы " Не расставлять отступы в стиле С autocmd filetype python set nocinС основными настройками покончено, осталось настроить плагины, первым настроим clang completer:
"Clang-completer " Включить дополнительные подсказки (аргументы функций, шаблонов и т.д.) let g:clang_snippets=1 " Использоать ultisnips для дополнительных подскахок (чтобы подсказки шаблонов " автогенерации были в выпадающих меню) let g:clang_snippets_engine = 'ultisnips' " Периодически проверять проект на ошибки let g:clang_periodic_quickfix=1 " Подсвечивать ошибки let g:clang_hl_errors=1 " Автоматически закрывать окно подсказок после выбора подсказки let g:clang_close_preview=1 " По нажатию Ctrl+F проверить поект на ошибки map <c-f> :call g:ClangUpdateQuickFix()<cr>С такими настройками clang completer будет выдавать подсказки после ввода .,->,::, чтобы попросить его подсказать прямо сейчас нужно будет нажать Ctr+x - Ctrl+u (по-очереди). Чтобы открыть окно с расшифровкой ошибок нужно набрать :copen. Также можно увидеть декларацию функции нажав Ctrl+]
Теперь настроим наше дерево проектов, напоминаю, что для этого используется плагин NERDTree:
" NERDTree " Открывать дерево по нажаить Ctrl+n map <c-n> :NERDTreeToggle<cr> " Немного магии, если мы запустим Vim без указания файла для редактирования, " то дерево будет открыто, а если будет указан файл, то дерево " открыто не будет autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif " Открывать новые окна справа set splitrightДля открытия файла достаточно выбрать его в дереве и нажать s, если вы хотите, чтобы новое окно разделяло экран вертикально или Enter для горизонтального разделения. Остался плаигн Snippets, в нем настраивать практически ничего не надо, кроме комбинаций клавиш:
" Snippets " Раскрыть шаблон let g:UltiSnipsExpandTrigger="<c-a>" " Отобразить список шаблонов let g:UltiSnipsListSnippets="<c-d>" " Идти вперед по шиблонам let g:UltiSnipsJumpForwardTrigger="<c-b>" " Идти назад let g:UltiSnipsJumpBackwardTrigger="<c-z>" " Разделять окно вертикально при редактировании let g:UltiSnipsEditSplit="vertical" " Версия Python (Нужно указать используемую в системе по-умолчанию) let g:UltiSnipsUsePythonVersion=2Настройка Vim закончена, теперь можно запускать vim в корне проекта, и пользоваться как обычной IDE. Однако в многомодульных проектах clang completer будет работать неправильно. Для того чтобы исправить это нужно создать файлик .clang_complete с параметрами компиляции (теми же что вы указываете компилятору), напрмер:
-DDEBUG -Isubmodule1 -Isubmodule2Если же вы указываете полный путь от корня проекта в #include, например: #include "submodule1/header.h", то вместо -Isubmodule1.. можно указать -I..
На этом все. Скачать получившейся .vimrc можно тут.
Комментарии
Отправить комментарий