2016-10-21 2 views
2

Класс, который я принимаю, требует, чтобы код был отправлен с двумя пробелами вместо символов табуляции. У меня есть autocmd в .vimrc, чтобы использовать две пробельные пробелы только в каталоге, используемом для назначений в этом классе.Переопределить vim autocmd для Make-файлов

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

Однако, я не хочу Makefiles в каталоге использовать опцию expandtab, так как делают требует символы табуляции.

Для этого я создал еще один autocmd в .vimrc:

autocmd FileType make setlocal noexpandtab 

Однако, в то время как первый autocmd работает отлично, второй не переопределяет первый и expandtab по-прежнему будет установлен, даже на Makefiles или файлов типа make. Это происходит независимо от порядка в конфиге.

Один несколько хак-у файлик для работы заключается в использовании

autocmd FileType make autocmd! 

который отключает все другие autocmd для файла. Однако это отключит ВСЕ другие файлы autocmd для Makefile, что нежелательно.

Есть ли другой способ дать второй приоритет команды над первым или каким-то образом отключить опцию expandtab на Makefiles?

ответ

0

Whitelisting, как правило, намного проще, чем в черный список:

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

Если поставить конфигурацию в ~/.vim/filetype.vim вместо ~/.vimrc, он может уже работать, потому что тогда работает ваша настройка пользователя перед тем встроенный ftplugin/Makefile (который сбрасывает отступы настройки что-то дельное):

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

Если это не сработает, я хотел бы добавить условное к :autocmd вместо определения нейтрализующей второй :autocmd:

autocmd BufNewFile,BufRead ~/path/to/dir/* if &filetype !=# 'make' | set tabstop=2 shiftwidth=2 expandtab | endif 
Смежные вопросы