[英]Vim key mapping compile and run for Java and C code
這是我的.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"
有人知道發生了什么嗎?
您是對的,語法略有錯誤(對於所有語法!)。 如果您打算發出兩個:!
呼叫,這些必須由|
分隔|
(在映射中轉義的<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.