2016-10-21 55 views
2

我正在使用的类需要使用两个空格而不是制表符提交代码。我在.vimrc中有一个autocmd,只能在用于该类中的分配的目录内使用两个空格长标签。覆盖Makefiles的vim autocmd

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

不过,我不希望在该目录的Makefile,因为化妆需要制表符使用expandtab选项。

要做到这一点,我在.vimrc创造了另一个自动命令:

autocmd FileType make setlocal noexpandtab 

然而,当第一自动命令的伟大工程,第二个不会覆盖第一和expandtab将继续设置,即使在Makefile文件或文件类型的make。无论配置中的顺序如何,这都会发生。

一个有点本事-Y的解决方案,我发现工作是使用

autocmd FileType make autocmd! 

它禁止其他所有自动命令对文件。但是,这将会禁用Makefiles的所有其他autocmd,这是不可取的。

有没有其他方法可以给第二个命令优先于第一个,或者以某种方式禁用Makefiles上的expandtab选项?

回答

0

白名单通常比黑名单轻松了许多:

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