21 мая 2010 г.

Использование VIm, как IDE для языка C.

Несмотря на утверждение, что 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-страниц, посвященных словам под курсором. Выглядит это вот так:
Затем идет куча мелких твиков и настроек, начинающихся с ключевого слова set. Что они делают написано в комментариях к ним; я лишь покажу как у меня отображаются символы табуляции и конечные пробелы (приведен скриншот простейшего Makefile'а):
Далее идут разнообразные настройки для GVim'а и для плагинов. Настройки для плагинов я рассмотрю позже, а в настройках для GVim'а нет ничего интересного - я убрал панели и полосы прокрутки и включил подсветку текущей строки для удобства (видно на скриншотах).
Вполне полезно ограничивать длину строки кода 80 символами - так проще читать исходники. Для этого тоже есть настройка в моем .vimrc - все символы > 80 подсвечиваются красным фоном:
Иногда, когда пишешь простейшую тестовую программу, нет смысла писать еще и Makefile. Если я пишу программу на C, к которой не предусмотрено Makefile'а, то Vim распознает это и компилирует текущий исходный файл при помощи gcc, командой gcc\ -Wall\ -o\ %<\ %. Если я редактировал файл test.c, то после компиляции я получу все предупреждения компилятора и, может быть, исполняемый файл test.
Далее, в тексте .vimrc идут различные биндинги для C и LaTeX'а позволяющие упростить набор кода. К сожалению, передавать словами, что делают эти биндинги, долго и трудно, поэтому я записал небольшой скринкаст, в котором я стремился показать как работают сишные биндинги:

Одна из основных (и любимых мною) частей моего ~/.vimrc - это хоткеи. Практически все используемые у меня хоткеи имеют префикс Ctrl+C - от слова command. Например <C-c>l означает, что надо нажать на Ctrl+С, отпустить и нажать на клавишу l. Все биндинги горячих клавиш закомментированы и разобраться, что они делают, не составит труда.
Некоторые из биндингов предназначены для вызова самописных функций, которые расположены рядом с ними Такими являются функции для добавления файлов из текущего каталога в дерево проектов (существующие средства в плагине Project весьма неудобны) и для вставки заголовка в файл с исходным кодом (внешний вид показан на скриншоте ниже).
Естественно, для более удобного редактирования кода, используются плагины. Один из них уже был здесь упомянут - это плагин Project. Он предназначен для использования в Vim'е дерева проектов, выглядит это примерно так:
Я уже писал об этом плагине на welinux'е, почитать можно здесь.
Еще один, достаточно функциональный плагин, это taglist. Он позволяет просматривать в отдельном буфере все функции, классы и т.п., связанные с текущим проектом; и быстро перескакивать между ними.
Для настроек taglist'а отведена часть .vimrc:

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