Подтвердить что ты не робот

Что делает команда компилятора в Vim?

Недавно я обнаружил, что в Vim есть команда, называемая компилятором. Вы можете вызвать его с помощью любого распространенного компилятора (например,: компилятор gcc,: компилятор php и т.д.), Но он, похоже, не имеет немедленного эффекта.

Я искал в manpages, но не нашел ничего полезного в том, что он на самом деле делает, и Vim Wiki. Кто-нибудь знает, что на самом деле делает эта команда?

4b9b3361

Ответ 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% для компиляции текущего файла...