Компиляция Java-кода в Vim более эффективно - PullRequest
22 голосов
/ 20 июня 2011

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

! javac MyClass.java

с последующим

! java -cp . MyClass

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

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

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


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


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

Ответы [ 5 ]

12 голосов
/ 06 февраля 2013

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


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

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 для циклического повторения ошибок.

8 голосов
/ 12 июля 2014

, если вы не используете какой-либо пакет в своем классе 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
6 голосов
/ 20 июня 2011

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

3 голосов
/ 20 июня 2011

С Makefiles вы можете использовать несколько очень общих вещей:

JAVAFILES=$(wildcard *.java)

mytarget: $(JAVAFILES)
    javac $^

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

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

Назначьте некоторые клавиши на :cnext и :cprevious для быстрой навигации по ошибкам.

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

0 голосов
/ 15 апреля 2018

Если вы запускаете linux (используйте bash), вот мои настройки: чтобы скомпилировать и запустить класс с вашим основным файлом, просто включите это в ваш файл vimrc

nnoremap <leader>ac :cd %:p:h <CR> :! javac %:t<CR> :! java %:t:r<CR>

Позвольте мне показать вам, каккод работает.Когда вы нажимаете клавишу лидера, а затем a и c (\ ac), код меняется на каталог текущего файла, который открыт в vim (предположительно, ваш основной).Затем код компилирует yourfile.java (%: t).Наконец, код запускает ваш главный файл yourfile (%: t: ​​r). обозначает возврат каретки, что эквивалентно вводу.Этот подход будет работать и для разработки проектов с несколькими классами, потому что вы можете добавить больше кода в строку выше, чтобы он компилировал другие классы перед запуском main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...