2014-04-25 2 views
2

은 다음과 같이 .vimrc 파일 내에서의 라인 무엇 자바와 C 코드를 실행빔 키 매핑 컴파일하고

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> 

파이썬 맵은 잘 실행됩니다. Java 맵은 정상적으로 컴파일되지만 실행되지 않습니다. 구문이 올바른지는 확실하지 않습니다.

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

누구나 무슨 일이 일어나고 있는지 알고 나는지도의 C 버전 무슨 일인지 모르겠다는 ...이 메시지를 displayig 유지?

답변

2

맞아, 문법이 약간 잘못되었습니다 (모든 경우에!). 그래서, &&은 다음 인용해야 두 :! 호출을 발행하려는 경우, 다음이 |로 구분해야합니다, &&하지 (매핑에 <Bar> 탈출) :

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

을하지만 더 나은 하나의 호출로이 작업을 수행 그것은하지 빔 :!에 의해 시작 쉘에 의해 평가된다 : :execute 표현식에서 사용하는 경우

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

또한, 특별한 % 키워드 만, 명령 줄에서 직접하지 인식됩니다. expand()으로 감싸 줘야합니다. 아, 그리고 shellescape()은 적절한 :! 이스케이프에 대한 추가 플래그를 수신해야합니다.

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

아, 아름다워! 자세한 대답 주셔서 감사합니다, 정말 고마워. 모든 것이 완벽하게 수행 될뿐만 아니라 이유도 이해합니다. – aweeeezy