※2014/7/6 zetamattaさんにコメントを頂き、本文に追記しました。
C++を勉強中です。これまでは、vimrcに
.vimrc
" 保存時にtabをスペースに変換するautocmdBufWritePre * :%s/\t/ /ge
のように記述して、保存時にTabをスペースに変換してました。しかしMakefileでは、生成コマンドは行頭に必ずタブ文字を入れなければなりません。(参考:生成規則定義部 @ MakeとMakefileの説明)
上記のようなvimrcではfiletypeがmakeのときでもTabをスペースに変換してしまうので、 ** filetypeがmakeのときだけ、保存時にTabをスペースに変換しない ** という設定をする必要がありました。コレを実現するための設定が↓。
.vimrc
" 保存時にfiletypeがmake以外の時はtabをスペースに変換するfunction!s:replace_tab_to_space()let position = getpos('.')if&filetype!~'make'
:%s/\t/ /ge
endifcall setpos('.', position)endfunction
augroup vimrc_rkaneko_bufwritepre
autocmd!autocmdBufWritePre * calls:replace_tab_to_space()
augroup END
(2014/7/6追記)
上記のようにしなくても、zetamattaさんのコメントにもあるように、kaoriya版vimの場合は、
.vimrc
autocmdBufWritePre * :%s/\t/ /ge
のようにするのではなく、
.vimrc
setexpandtab
とするだけで、
Makefile を開いた時に「setlocal noexpandtab」が実行されて、自動的にTab展開が無効になるようです。
私の環境でも、確認できました。
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Sep 112013 10:03:16)
MacOS X (unix) version
Included patches: 1-22
Compiled by sakamoto@macbook
Huge version with MacVim GUI.
ただし、Tabを使う人は追記の設定では保存時にTabをスペースに変換しないので、ニーズによりけりです。
(2014/7/6追記おわり)