2016-03-31 2 views
0

Я хочу иметь команду для компиляции и выполнения файла C, который я редактирую в vim. Как мне это сделать? Не работает из-за .c в имени файла.Как скомпилировать и выполнить в vim?

:map <leader>m :!make && ./% 

Если я использую :!make && ./filename я не знаю, как двигаться через выход, так что я хотел бы видеть решение с вертикальным разделенным окном тоже.

ответ

0

Вызов оболочки в :map <leader>m :!make && ./% вызывает программу make, которая выполняет поиск Makefile для обработки. Рецепты в Makefile описывают, как скомпилирована ваша программа, и как вызывается окончательный исполняемый файл (или по умолчанию он равен a.out, если он опущен). Хотя имя файла, который вы редактируете (ссылка %), может иметь тот же префикс, что и искомое исполняемое имя файла, это не гарантируется.

Для компиляции, запуска и редактировать вывод вашей программы в разделенном окне написать рецепт Makefile, который будет автоматически запускаться после компиляции и перенаправляет вывод исполняемого файла во временный файл, например:

.PHONY: all 

all: executablename runlog 

executablename: executablename.c 
     cc -o executablename executablename.c 

runlog: executablename 
     ./executablename >runlog 

Имейте в виду, что 8 областей с отступами необходимо заменить вкладкой для функции Makefile.

Ссылка временный файл в вашем отображении: :map <leader>m :!make^M:sp runlog^M где ^M проистекает из набрав Ctrl +Return.

+0

Время, сохраненное с помощью ярлыка лидера, будет потрачено на удаление дополнительных файлов. –

+0

Вам не нужно удалять файлы для этого, потому что перенаправление оболочки _> runlog_ внутри Makefile перезаписывает _runlog_ каждый раз. Если вы беспокоитесь о файле, переадресуйте его на _/tmp/runlog_cleaned_up_by_system_ или добавьте удаление в чистый рецепт в Makefile. Кроме того, я не понимаю вашего намерения сэкономить время с сопоставлением лидеров (по сравнению с обычным сопоставлением), моему понимающему руководителю просто удобное пространство имен для ваших собственных сопоставлений. – 149

+0

Как я мог бы это сделать, если бы мне приходилось выполнять разные программы для компиляции в том же Makefile? Не существует способа использовать имя файла минус .filetype? –