2014-01-24 4 views
2

Vim을 불러오고 있으며, F5 키를 파일 형식에 따라 결정되는 컴파일 명령에 매핑하여 IDE로 설정하려고합니다. 내 ~/.vim/ftplugin/c.vimVim ftplugin은 C++ 파일의 cpp.vim 대신 c.vim을 실행합니다.

:

map <F5> :w<CR>:!clang % -o %:r.out && ./%:r.out<CR> 

~/.vim/ftplugin/cpp.vim :

map <F5> :w<CR>:!clang++ -ggdb -pthread -std=c++11 % -o %:r.out && ./%:r.out<CR> 

내가 (.cpp 확장자)는 C++ 파일을 열고 F5 충돌, c.vim에서 명령이 실행됩니다. 왜 이런 일이 일어나는 걸까요?

c.vim 파일을 제거하면 Vim이 cpp.vim을로드하고 예상대로 작동합니다.

runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim 

~/.vim/ftplugin/c.vim 소스 것입니다 의미 : 정력과 함께 제공

답변

10

CPP에의 ftplugin 다음 줄이 있습니다.

이 문제를 극복하기위한 방법은 ~/.vim/after/ftplugin/cpp.vim~/.vim/after/ftplugin/c.vim 파일에 매핑하는 것입니다.

하지만 문제는 거기서 멈추지 않는다 : 당신은 아마 적어도 모드를 제공하려는 당신은 :map를 사용하는

  • . 또한 아마 noremap를 사용한다 nmap
  • 그래서 그것은 당신이 cpp을 열고 c 파일로 전환하여 <f5> 매번 이상 짓밟 있도록 nnoremap
  • 당신의 매핑이 전역이 될 것입니다. 특정 버퍼에 대해 로컬로 설정해야합니다. nnoremap <buffer>
  • 따라서 :make과 퀵 픽스 목록을 활용할 수 있도록 적절하게 makeprg을 설정해야합니다. 예 : 더 도움말을 참조하십시오 setlocal makprg clang\ %\ -o\ %:r.out

: 당신이 /after/ftplugin/ 폴더로 파일을 이동하면

:h :map 
:h :map-local 
:h 'makeprg' 
:h :make 
:h quickfix 
2

은, 당신의 C 구체적인 지침은 여전히 ​​C++ 파일에서 실행됩니다. 하지만 C++ 명령어는 C 명령어 이후에 실행됩니다.

이 문제가 발생하지 않도록하려면, 당신 ~/.vim/ftplugin/c.vim 파일의 시작 부분이 추가

if (&ft != 'c') 
    finish 
endif 
관련 문제