Vim键映射编译和运行Java和C代码

时间:2014-04-25 12:17:07

标签: java vim compilation mapping

这里的.vimrc中的行是什么样的:

autocmd FileType python nnoremap <buffer> <F9> :exec '!python' shellescape(%)<cr>
autocmd FileType java nnoremap <buffer> <F9> :exec '!javac' shellescape(%) && '!java' shellescape(%:r)<cr>
autocmd FileType c,cpp nnoremap <buffer> <F9> :exec '!gcc' shellescape(%) && './a.out'<cr>

Python地图执行得很好。 Java地图将编译正常,但不会运行。我不完全确定我的语法是否正确。 我不知道地图的C版本发生了什么......它会显示消息:

"error: Class names, 'test.C,test', are only accepted if annotation processing is explicitly requested"

任何人都知道发生了什么?

1 个答案:

答案 0 :(得分:3)

你是对的,语法略有错误(对于所有人来说!)。如果您打算发出两个:!来电,这些必须由|(映射中的转义<Bar>)分隔,而不是&&

autocmd FileType java nnoremap <buffer> <F9> :exec '!javac' shellescape(%) <Bar> exec '!java' shellescape(%:r)<cr>

但最好通过一次调用来执行此操作:然后必须引用&&,以便由:!启动的shell进行评估,而不是Vim:

autocmd FileType java nnoremap <buffer> <F9> :exec '!javac' shellescape(%) '&& java' shellescape(%:r)<cr>

此外,特殊%关键字只能直接在命令行中识别,而不能在:execute表达式中使用时识别。你需要用expand()包装它。哦,shellescape()应该收到一个额外的标记,以便:!转义。

autocmd FileType java nnoremap <buffer> <F9> :exec '!javac' shellescape(expand('%'), 1) '&& java' shellescape(expand('%:r'), 1)<cr>