Minoru 19.06.2010 00:29
Vim — Компиляция по F5, запуск по F9
До недавнего я довольствовался таким циклом написания программ:
1 |
|
Для самых нетерпеливых привожу соответствующий кусок ~/.vimrc:
Итак, мы пишем две функции, каждая из которых биндит определённое действие на определённую клавишу. В моём случае на F5 я решил повесить сборку проекта, а на F9 — его запуск, причём во втором случае если бинарника ещё нет, то он будет собран как если бы была нажата первая клавиша. Отдельным преимуществом этих биндов является тот факт, что они сначала ищут Makefile и, если он есть, собирают с его помощью; в противном случае используется дефолтный компилятор и собирается текущий файл.
Рассмотрим первую функцию. В ней происходит проверка, доступен ли Makefile на чтение. Если он читабелен, мы используем make и собираем проект (:make), после чего показываем возникшие ошибки (или не показываем ничего, если проект успешно скомпилился). Заметим, что бинды выполняются для командного режима (map) и режима вставки (imap).
Теперь второй случай, т.е. когда Makefile отсутствует или недоступен для чтения. В этом случае мы собираем текущий файл, для чего явно передаём его имя программе make. После этого, опять-таки, показываются ошибки.
Вторая функция не намного отличается от первой, просто на этот раз если ошибок нет и цепочка действий продолжается, будет запущена программа с таким же именем, как текущий файл (без расширения).
В обоих функциях перед сборкой выполняется сохранение текущего файла.
Наконец, после каждой функции есть строка, указывающая, для каких файлов следует выполнять функции. Т.к. мои бинды написаны для C/C++, они применяются при открытии файлов с расширениями c, cc, cpp, h и hpp. Таким образом, вы можете написать произвольное количество функций для разных языков и подгружать их по мере надобности. Можно, например, написать отдельные привязки для HTML, которые будут открывать файл в разных браузерах, а в случае с LaTeX-файлами — собирать dvi и pdf. В общем, простор для фантазии неограничен — дерзайте ;)
Happy vimming!
Делал и так. Все равно лень. Даже если юзать историю, а не всё руками набирать, последовательность вроде :<вероятно, ещё несколько раз Up> все равно длиннее, чем просто нажать F5.
Упс, покорёжило то, что было в угловызх скобках. Должно быть так:
<Esc><Up><вероятно, ещё несколько раз Up><Enter>
<Esc><Up><вероятно, ещё несколько раз Up><Enter>
Кат был — видать, при предпросмотре унесло.
Добавил коммент в #140
Добавил коммент в #140
Открываю пост для редактирования — кат уже есть. Публикую — работает. Я же вроде достаточно спал сегодня, откуда такие глюки?
а еще можно открыть две сессии в скрине.
сохранился в первой, во второй поискал в истории компиляция && запуск ;)
сохранился в первой, во второй поискал в истории компиляция && запуск ;)
Дык основная идея в том, чтобы не выходить из окна vim'a вовсе.
Только я бы повесил сочетания на Ctrl+b (Build) и Ctrl+R (Run). Vim специально написан так, чтобы руками меньше приходилось тянуться)
Только я бы повесил сочетания на Ctrl+b (Build) и Ctrl+R (Run). Vim специально написан так, чтобы руками меньше приходилось тянуться)
В последнее время работаю в основном на нетбуке — тут можно одновременно большим пальцем руки касаться левого контрола, а мизинцем той же руки — Delete или Backspace. Тут нет такого понятия как «тянуться к клавишам» :D
А ежели серьёзно — наверное, привык за время использования Borland'овских продуктов именно к таким хоткеям, вот и биндил на них. И настоящим vim-way был бы бинд сборки на b, а запуска — на r (в командном режиме). А сочетаниями с контролом и прочими модкеями пусть емаксеры промышляют :P
А ежели серьёзно — наверное, привык за время использования Borland'овских продуктов именно к таким хоткеям, вот и биндил на них. И настоящим vim-way был бы бинд сборки на b, а запуска — на r (в командном режиме). А сочетаниями с контролом и прочими модкеями пусть емаксеры промышляют :P
Скрин мне нравится, но с ним одна проблема — я его забываю запускать :)
А статью почитать лень было? Описанные бинды юзают Makefile, если он есть, иначе компилится текущий файл. Я не вижу смысла писать Makefile для лабораторки, состоящей из одного-единственного файла.
Возьмите за привычку писать Makefile вообще для всего. Потому что если что-то компилируется, скажем, с определенным набором флагов, то через месяц вы их вообще не вспомните.
Если мне понадобится указать для какого-то проекта какие-то особые флаги — да, напишу Makefile. Для лабораторки же, состоящей из одного файла и не содержащей никаких особых хитростей, это не нужно.
Ну, скажем прямо, это не ненужно, а просто лень. После выпуска из университетов бывшие студенты, которые ленились что-то документировать, давать нормальные имена переменным и разрабатывать оптимальные алгоритмы, начинают писать софт. Так появилась замечательная система ЕГАИС, потому в такой глобокой жо* находится почти все отечественное софтостроение.
Приучайтесь к порядку, это очень вам поможет в работе.
Приучайтесь к порядку, это очень вам поможет в работе.
Мне не лень написать Makefile, просто в случае с лабораторками он не нужен, потому что программы состоят из одного файла и компилятся без использования каких-либо особых флагов.
Повторяю ещё раз: программы не используют никаких особых флагов и состоят из одного файла. В таком случае мне достаточно нажать в vim'е описанные комбинации, а в терминале — пролистать историю и найти gcc -o program code.c
И да, получится быстрее (по крайней мере, в первом случае), чем make
И да, получится быстрее (по крайней мере, в первом случае), чем make
:g++ -o program code.c
:./program
из вима не судьба была?...