Что делает команда компилятора в Vim?
Недавно я обнаружил, что в Vim есть команда, называемая компилятором. Вы можете вызвать его с помощью любого распространенного компилятора (например,: компилятор gcc,: компилятор php и т.д.), Но он, похоже, не имеет немедленного эффекта.
Я искал в manpages, но не нашел ничего полезного в том, что он на самом деле делает, и Vim Wiki. Кто-нибудь знает, что на самом деле делает эта команда?
Ответы
Ответ 1
Он устанавливает параметры для этого компилятора, такие как программа для :make
и формат сообщений об ошибках, поэтому vim может перевести вас в места ошибок. Посмотрите $VIMRUNTIME/compiler/
для разных .vim файлов, которые могут быть получены.
:help write-compiler-plugin
Плагин компилятора устанавливает параметры для использования с конкретным компилятором. Пользователь может загрузите его командой :compiler
. Основное назначение - установить 'errorformat' и 'makeprg'.
См. также :help errorformat
и :help makeprg
.
Здесь файл компилятора GCC на моей машине, например:
/usr/share/vim/vim72/compiler/gcc.vim
" Vim compiler file
" Compiler: GNU C Compiler
" Maintainer: Nikolai Weibull <[email protected]>
" Latest Revision: 2006-12-20
if exists("current_compiler")
finish
endif
let current_compiler = "gcc"
let s:cpo_save = &cpo
set cpo-=C
CompilerSet errorformat=
\%*[^\"]\"%f\"%*\\D%l:\ %m,
\\"%f\"%*\\D%l:\ %m,
\%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
\%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
\%f:%l:\ %m,
\\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
\%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
\%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
\%D%*\\a:\ Entering\ directory\ `%f',
\%X%*\\a:\ Leaving\ directory\ `%f',
\%DMaking\ %*\\a\ in\ %f
if exists('g:compiler_gcc_ignore_unmatched_lines')
CompilerSet errorformat+=%-G%.%#
endif
let &cpo = s:cpo_save
unlet s:cpo_save
Ответ 2
Как уже упоминалось, в Vim обычно установлено несколько общих конфигураций компилятора, поэтому он автоматически выберет подходящую. Чтобы на самом деле использовать конфигурацию компилятора, вам нужно использовать функцию Vim: make, как также упоминалось, но режим работы по умолчанию предполагает существование Makefile
.
Если вы просто пытаетесь выполнить быструю компиляцию текущего файла/буфера (без существующего Makefile), то, если у вас установлен GNU make, вы можете просто скомпилировать его так (как описано здесь):
:make %:r
И он скомпилирует файл и предоставит vim сообщения об ошибках/предупреждениях, чтобы вы могли перемещаться по каждому из них, используя список быстрых исправлений (:help quickfix
) - :cn
Следующая ошибка :help quickfix
:cp
Предыдущая ошибка :cw
новом окне перечислены ошибки.
Если у вас не установлен GNU make, вы можете установить эту переменную - либо сразу в текущем сеансе, например:
:se makeprg=gcc\ -o\ %<\ %
Или поместите его в файл ~/.vimrc:
set makeprg=gcc\ -o\ %<\ %
Затем вы можете ввести:
:make
И он скомпилирует файл и предоставит вам список исправлений ошибок/предупреждений в Vim.
РЕДАКТИРОВАТЬ: Если вы также хотите запустить скомпилированный исполняемый файл из vim, который вы можете сделать ("!" Выполняет, "%: r" - это имя файла без суффикса):
:!./%:r
Ответ 3
:help compiler
Он задает параметры для выбранного компилятора для текущего буфера.
Ответ 4
Если вы редактируете java файл, вы можете сделать: компилятор javac, а затем: make% для компиляции текущего файла...