2016-10-21 2 views
2

내가 택하는 클래스는 탭 문자 대신 두 칸으로 코드를 제출해야합니다. .vimrc에 autocmd가 있는데,이 클래스의 할당에 사용 된 디렉토리 내에서 2 개의 공백 긴 탭을 사용합니다.Makefile에 대해 vim autocmd 덮어 쓰기

autocmd BufNewFile,BufRead ~/path/to/dir/* set tabstop=2 shiftwidth=2 expandtab 

그러나, 나는 메이크업 탭 문자를 필요로하기 때문에 디렉토리에 메이크가 expandtab 옵션을 사용하지 않습니다.

내가 .vimrc 다른 autocmd를 만들어이 작업을 수행하려면 : 첫 번째 autocmd가 잘 작동하는 동안

autocmd FileType make setlocal noexpandtab 

그러나, 두 번째는 첫 번째를 무시하지 않으며 expandtab도 메이크 또는 파일에 설정 될 것입니다 make 유형의. 이것은 구성의 순서와 관계없이 발생합니다. 나는 일에 발견했습니다

하나 다소 해킹-Y 솔루션은 파일을 다른 모든 autocmd 년대를 비활성화

autocmd FileType make autocmd! 

을 사용하는 것입니다. 그러나이 방법은 다른 모든 autocmd를 Makefile에 사용할 수 없게하므로 바람직하지 않습니다.

첫 번째 명령보다 두 번째 명령 우선 순위를 부여하거나 Makefile에서 expandtab 옵션을 비활성화하는 다른 방법이 있습니까?

답변

0

화이트리스트는 일반적으로 블랙리스트보다 훨씬 쉽습니다 :

augroup class 
    autocmd! 
    autocmd BufNewFile,BufRead ~/path/to/dir/*.{foo,bar,baz} set tabstop=2 shiftwidth=2 expandtab 
augroup END 
0

대신 ~/.vimrc~/.vim/filetype.vim의 구성을 넣을 경우, 사용자 정의가 실행되기 때문에, 그것은 이미 작동 할 수 있습니다 전에 내장 ftplugin/Makefile 들여 쓰기 설정을 감지 할 수있는 값으로 재설정합니다.

augroup filetypedetect 
autocmd BufNewFile,BufRead ~/path/to/dir/* set tabstop=2 shiftwidth=2 expandtab 
augroup END 

그래도 작동하지 않으면에 조건을 추가합니다. 중화 제 2 정의를 대신하여:

autocmd BufNewFile,BufRead ~/path/to/dir/* if &filetype !=# 'make' | set tabstop=2 shiftwidth=2 expandtab | endif