在Vim中更有效地编译Java代码

我来自Eclipse背景,但我喜欢Vim作为文本编辑器。 我目前正在尝试将Vim作为Java IDE。 目前我这样做是为了编译:

! javac MyClass.java 

其次是

 ! java -cp . MyClass 

如果我有编译错误,我必须回到编译器输出使用! 并手动跳转到产生错误的每一行。 一旦我开始添加其他类,我就必须分别编译它们。

必须有一种比这更有效的方法。 在我目前效率低下的Vim工作流程中,我可以在图形IDE中更快地完成工作,这比我使用Vim的目的要好。

我希望能够输入类似的东西:compile在包含我的main方法的类中编译以编译我的所有源代码并显示错误消息的分屏列表。 你会推荐什么?


相关,但与我个人无关

  • 将vim用作Java IDE的提示?
  • 用Vim编程Java

更新 :我从这个问题中得到的结论是作为一个单独的答案发布的。

这里是用于使用javac进行编译的vim wiki文章。

根据要求,我已经将这个问题作为一个单独的答案发布了。


这是我如何使用每个人的建议。

快速完成编译错误

将其添加到~/.vimrc

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

F9编译,F10 / F11循环错误。

如果你不在java类中使用任何包,那么

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

映射.vimrc文件中的F5以自动化构建

 map  :call CompileRunGcc() 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 

使用Makefile,您可以使用一些非常通用的东西:

 JAVAFILES=$(wildcard *.java) mytarget: $(JAVAFILES) javac $^ 

另一方面,你可能会做得很好

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

将一些键映射到:cnext:cprevious快速导航错误。

使用:colder / :cnewer返回早期/晚期的quickfix列表。 Quickfix将记住quickfix堆栈中特定quickfix列表的位置。

如果你运行linux(使用bash),这是我的设置:编译并运行你的主文件类只需在你的vimrc文件中包含它

 nnoremap ac :cd %:p:h  :! javac %:t :! java %:t:r 

让我向您介绍此代码的工作原理。 当您按下前导键后跟a和c(\ ac)时,代码将更改为在vim中打开的当前文件的目录(可能是您的主要文件)。 然后,代码编译yourfile.java(%:t)。 最后,代码运行你的主文件yourfile(%:t:r)。 代表回车,相当于回车。 这种方法也适用于开发具有多个类的项目,因为您可以在上面的行中添加更多代码,以便在运行main之前编译其他类。