Компиляция кода из vim

18

Новичок vimи я хочу иметь возможность компилировать код изнутри vimбез запуска нового терминала и вызова компилятора.

Как мне это сделать? Обратите внимание, что это требование не ограничивается gccтолько, мне иногда нужно вызвать pythonтакже текущий скрипт, над которым я работаю, так что вы поняли ...

phunehehe
источник

Ответы:

25

Написать Makefile, тогда вы можете просто:

:make

изнутри vim. И если компиляция не удалась:

:copen

покажет вам предупреждение и ошибки. Выбор их приведет вас к соответствующему файлу и строке.

Крис
источник
12

В vim текущий файл может называться %, так что

:!python %

Смотрите :he cmdline-special(или здесь )

Гленн Джекман
источник
6

Если по какой-то причине вам не нравятся make-файлы, вы можете вызвать любую команду с помощью:!

Например, вы можете использовать «:! Javac * .java && java Foo» для компиляции и запуска простой Java-программы. Вы также можете вызывать другие системы сборки (scons, cmake, ...) таким образом.

stribika
источник
3

Попробуйте плагин quickrun для Vim. На странице есть ссылка на github, который является последней версией и которую я использую.

Преимущество использования этого плагина по сравнению с выполнением :!- вывод команды будет собран и показан в разделенном окне.

Кроме того, по умолчанию этот плагин будет висеть на вашем экземпляре vim, когда вы попросите его выполнить команду, но его можно настроить на асинхронный запуск команды, что я и делаю. Прочитайте документацию для более подробной информации.

Шрикант Шарат
источник
3

Я использую vim, в котором есть скомпилированный интерпретатор Python.

Я исходный файл Python, который имеет эту функцию:

def pyterm(filename="", interactive=1):
    cmd = "%s %s %s " % (PYTHON, "-i" if interactive else "", filename)
    if "DISPLAY" in os.environ:
        return run_config(os.environ.get("XTERM"), cmd)
    else:
        return os.system(cmd)

И сопоставьте его с сочетанием клавиш:

nmap ;ru :update<CR>:python pyterm(vim.current.buffer.name, 0)<CR>
nmap ;ri :update<CR>:python pyterm(vim.current.buffer.name, 1)<CR>

Ранее я установил некоторые переменные окружения, чтобы определить точный терминал для запуска, если используется gvim, или в том же терминале, если не в X.

Затем я обычно просто набираю '; ri' в буфере Python для его запуска (обычно для проверки).

Кит
источник
2

Vim может использоваться для компиляции с использованием gnu make для текущего файла - даже если для файла нет Makefile (более подробную информацию смотрите здесь ):

:make %:r

Таким образом, vim предоставляет вам доступ к отзыву об ошибках быстрого исправления из :help quickfixсписка compiler ( ) - :cnследующая ошибка, :cpпредыдущая ошибка, :cwошибки списка нового окна.

Если у вас нет gnu make, вы можете установить переменную makeprg (измените на g ++, если вы компилируете C ++):

:se makeprg=gcc\ -o\ %<\ %

а затем использовать команду ВИМ грим для компиляции текущего файла и получить QuickFix список ошибок в Vim:

:make

РЕДАКТИРОВАТЬ: Если вы также хотите запустить скомпилированный исполняемый файл из vim, который вы можете сделать («!» Выполняет, «%: r» - это имя файла без суффикса):

:!./%:r
Пирз
источник
1

В случае с gcc, python и т. Д. Вы можете назвать это двоеточием (:!)

Например. :!python something.py

JinX
источник
0
!gcc file.c && ./a.out

Это скомпилирует ваш C-файл, а также запустит исполняемый файл, запрашивая ввод всех данных в вашем окне vim.

Хасил Шарма
источник
1
Более полный ответ будет включать «:», и чтобы сделать его более универсальным, вы можете изменить «file.c» для текущего файлового оператора «%»::!gcc % && ./a.out
Pierz
Я делаю что-то подобное в моем .vimrc, я сопоставляю Command + Shift + R:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r
0

Что касается конкретного случая компиляции исходного кода.

И если у вас есть что-то, что может скомпилировать python, установите makeprgсоответственно.

Люк Эрмитт
источник