这里的.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"
任何人都知道发生了什么?
答案 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>