Несмотря на утверждение, что Vim это всего лишь текстовый редактор и использовать его как IDE глупо, я довольно продолжительное время успешно использую Vim как IDE для языка C. В этом мне помогает набор удобных плагинов и периодически улучшаемый мною .vimrc.

К сожалению, я не встречал в Интернете статей, посвященных превращению Vim в IDE для C. Поэтому я решил написать свою :-).

Для начала рассмотрим, что нам предлагает Vim "из коробки" для редактирования исходников на C. Возможностей не так уж и много и большая их часть описана здесь: http://tldp.org/HOWTO/C-editing-with-VIM-HOWTO/index.html.

Появляется больше возможностей, когда мы начинаем редактировать конфигурационный файл ~/.vimrc под свои нужды. В качестве примера, можно скачать мой .vimrc (и сопутствующий каталог .vim) здесь. В дальнейшем, в статье все примеры буду на основе моего .vimrc.

В самом начале конфига, я включаю поддержку красивого вывода man-страниц, посвященных словам под курсором. Выглядит это вот так:

Manpage in Vim

Затем идет куча мелких твиков и настроек, начинающихся с ключевого слова set. Что они делают написано в комментариях к ним; я лишь покажу как у меня отображаются символы табуляции и конечные пробелы (приведен скриншот простейшего Makefile’а):

Makefile

Далее идут разнообразные настройки для GVim’а и для плагинов. Настройки для плагинов я рассмотрю позже, а в настройках для GVim’а нет ничего интересного — я убрал панели и полосы прокрутки и включил подсветку текущей строки для удобства (видно на скриншотах).

Вполне полезно ограничивать длину строки кода 80 символами — так проще читать исходники. Для этого тоже есть настройка в моем .vimrc — все символы > 80 подсвечиваются красным фоном:

80 symbol separator

Иногда, когда пишешь простейшую тестовую программу, нет смысла писать еще и Makefile. Если я пишу программу на C, к которой не предусмотрено Makefile’а, то Vim распознает это и компилирует текущий исходный файл при помощи gcc, командой gcc\ -Wall\ -o\ %<\ %. Если я редактировал файл test.c, то после компиляции я получу все предупреждения компилятора и, может быть, исполняемый файл test.

Далее, в тексте .vimrc идут различные биндинги для C и LaTeX’а позволяющие упростить набор кода. К сожалению, передавать словами, что делают эти биндинги, долго и трудно, поэтому я записал небольшой скринкаст, в котором я стремился показать как работают сишные биндинги:

Одна из основных (и любимых мною) частей моего ~/.vimrc — это хоткеи. Практически все используемые у меня хоткеи имеют префикс Ctrl+C — от слова command. Например <C-c>l означает, что надо нажать на Ctrl+С, отпустить и нажать на клавишу l. Все биндинги горячих клавиш закомментированы и разобраться, что они делают, не составит труда.

Некоторые из биндингов предназначены для вызова самописных функций, которые расположены рядом с ними. Такими являются функции для добавления файлов из текущего каталога в дерево проектов (существующие средства в плагине Project весьма неудобны) и для вставки заголовка в файл с исходным кодом (внешний вид показан на скриншоте ниже).

Source code header

Естественно, для более удобного редактирования кода, используются плагины. Один из них уже был здесь упомянут — это плагин Project. Он предназначен для использования в Vim’е дерева проектов, выглядит это примерно так:

Project plugin

Я уже писал об этом плагине на welinux’е, почитать можно здесь.

Еще один, достаточно функциональный плагин, это taglist. Он позволяет просматривать в отдельном буфере все функции, классы и т.п., связанные с текущим проектом; и быстро перескакивать между ними.

Taglist plugin

Для настроек taglist’а отведена часть .vimrc:

" Некоторые настройки для плагина TagList
let g:Tlist_Show_One_File=1                         " показывать информацию только по одному файлу
let g:Tlist_GainFocus_On_ToggleOpen=1               " получать фокус при открытии
let g:Tlist_Compact_Format=1
let g:Tlist_Close_On_Select=0                       " не закрывать окно после выбора тега
let g:Tlist_Auto_Highlight_Tag=1                    " подсвечивать тег, на котором сейчас находимся

Для подсветки ошибок прямо в коде, используется плагин errormarker. Для него в .vimrc должна быть лишь одна запись, описывающая формат строки с ошибкой или предупреждением компилятора. Эта строка расположена в моем .vimrc прямо над настройками для taglist’а.

errormarker plugin

Еще два, используемых мною, плагина это a.vim и mark.vim. Первый плагин позволяет быстро переключаться между *.c и *.h файлами. У меня, для этого действия используется сочетание клавиш <C-c>sw.

Второй плагин позволяет подсвечивать все слова в файле, которые совпадают с словом под курсором, причем для каждого нового слова используется свой цвет. Это удобно при просмотре ассемблерных кодов. Для выделения слова используется сочетание клавиш \m.

mark plugin

vim