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

Более эффективно компилировать Java-код в Vim

Я родом из фона Eclipse, но я люблю Vim как текстовый редактор. В настоящее время я экспериментирую с Vim как Java IDE. В настоящее время я делаю это для компиляции:

! javac MyClass.java

за которым следует

! java -cp . MyClass

Если у меня есть ошибки компиляции, я должен вернуться к выходу компилятора с помощью ! и вручную перейти к каждой строке, вызвавшей ошибку. И как только я начинаю добавлять другие классы, мне приходится составлять каждый из них отдельно.

Там должен быть более эффективный путь, чем это. Под моим текущим неэффективным рабочим процессом Vim я могу быстрее сделать материал в графической среде IDE, которая превосходит цель использования Vim для меня.

Я хотел бы иметь возможность вводить что-то вроде :compile в классе, содержащем мой основной метод, для компиляции всех моих источников и представления списка сообщений об ошибках. Что бы вы порекомендовали?


Связанный, но не имеющий отношения ко мне лично:


Обновить. Мой ответ на этот вопрос отправлен как отдельный ответ.

4b9b3361

Ответ 1

Здесь vim wiki для компиляции с javac.

Ответ 2

По просьбе я отправил свой вынос из этого вопроса в качестве отдельного ответа.


Вот как я использовал все советы.

Walking through compile errors quickly

Добавьте это в ~/.vimrc:

autocmd Filetype java set makeprg=javac\ %
set errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
map <F9> :make<Return>:copen<Return>
map <F10> :cprevious<Return>
map <F11> :cnext<Return>

F9 для компиляции, F10/F11 для циклического прохождения ошибок.

Ответ 3

если вы не используете какой-либо пакет в своем классе java, тогда

//compile
:!javac %

//run
:!java -cp %:p:h %:t:r

отобразите F5 в файле .vimrc, чтобы автоматизировать сборку

map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!gcc % -o %<"
exec "!time ./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "!time ./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!time java -cp %:p:h %:t:r"
elseif &filetype == 'sh'
exec "!time bash %"
elseif &filetype == 'python'
exec "!time python2.7 %"
elseif &filetype == 'html'
exec "!firefox % &"
elseif &filetype == 'go'
exec "!go build %<"
exec "!time go run %"
elseif &filetype == 'mkd'
exec "!~/.vim/markdown.pl % > %.html &"
exec "!firefox %.html &"
endif
endfunc

Ответ 4

С помощью Makefile вы можете использовать некоторые общие вещи:

JAVAFILES=$(wildcard *.java)

mytarget: $(JAVAFILES)
    javac $^

С другой стороны, вы, вероятно, отлично сделали бы

:compiler javac
:se makeprg=javac\ **/*.java
:make
:copen

Сопоставьте некоторые клавиши с :cnext и :cprevious, чтобы быстро перемещаться по ошибкам.

Используйте :colder/:cnewer, чтобы вернуться к более ранним/поздним спискам быстрого исправления. Quickfix будет помнить, где в стек быстрого исправления вы были для определенного списка fastfix.