Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

VimでMakefileの保存時だけTabをスペース変換しない

$
0
0

※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追記おわり)

参考


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>