2016-10-21 119 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