在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)。