Makefileと通常のコードファイルの両方を編集するためにvimをセットアップする方法は?


22

Mac OSX 10.7.5を使用しています。.vimrcの内容は次のとおりです。

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set shiftround  
set smarttab    
set autoindent  
set copyindent  

autocmd FileType make setlocal noexpandtab

私がやろうとしているのは、.jsや.htmlなどの通常のファイルを編集するときに、通常のタブではなく4つの空白スペースでタブをインデントすることです。

しかし、Makefileを編集するときは、インデント用の4つの空白スペースではなく、通常のタブにする必要があります。

.vimrcの上記の設定でそれが得られると思いましたが、Makefileを編集しているときはインデント用に4つの空白スペースが残っているので、私にとってはうまくいきません。

ここで何が間違っているのか分かりませんか?

回答:


26

これは私のセクションです.vimrc

" enable filetype detection:
filetype on
filetype plugin on
filetype indent on " file type based indentation

" recognize anything in my .Postponed directory as a news article, and anything
" at all with a .txt extension as being human-language text [this clobbers the
" `help' filetype, but that doesn't seem to prevent help from working
" properly]:
augroup filetype
  autocmd BufNewFile,BufRead */.Postponed/* set filetype=mail
  autocmd BufNewFile,BufRead *.txt set filetype=human
augroup END

autocmd FileType mail set formatoptions+=t textwidth=72 " enable wrapping in mail
autocmd FileType human set formatoptions-=t textwidth=0 " disable wrapping in txt

" for C-like  programming where comments have explicit end
" characters, if starting a new line in the middle of a comment automatically
" insert the comment leader characters:
autocmd FileType c,cpp,java set formatoptions+=ro
autocmd FileType c set omnifunc=ccomplete#Complete

" fixed indentation should be OK for XML and CSS. People have fast internet
" anyway. Indentation set to 2.
autocmd FileType html,xhtml,css,xml,xslt set shiftwidth=2 softtabstop=2

" two space indentation for some files
autocmd FileType vim,lua,nginx set shiftwidth=2 softtabstop=2

" for CSS, also have things in braces indented:
autocmd FileType css set omnifunc=csscomplete#CompleteCSS

" add completion for xHTML
autocmd FileType xhtml,html set omnifunc=htmlcomplete#CompleteTags

" add completion for XML
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags

" in makefiles, don't expand tabs to spaces, since actual tab characters are
" needed, and have indentation at 8 chars to be sure that all indents are tabs
" (despite the mappings later):
autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

" ensure normal tabs in assembly files
" and set to NASM syntax highlighting
autocmd FileType asm set noexpandtab shiftwidth=8 softtabstop=0 syntax=nasm

セクションでは、自己説明する必要がありますが、私はあなたがvimのヘルプを読むことをお勧めfiletypeしてautocmd

あなたに最も関連する行は、おそらくこれです:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

ただし、ファイルタイプの検出がオンになっていることを確認してください。


優れた自動コマンドをありがとう!このチュートリアルで、セクションでsを.vimrcラップしないと、Vimがこれらを読み取って複製することを学習しているときに気付きました。これは正しいです?autocmdaugroup
ジョシュアデトワイラー

6

autocmdsでこれを行う代わりに、各ファイルタイプに対して独自のユーザーファイルタイププラグインを作成し、それをに配置することができます。~/.vim/ftplugin/<filetype>.vimここ<filetype>で、実際のファイルタイプを指定します。例えば:

mkdir -p ~/.vim/ftplugin
echo "setlocal noexpandtab" > ~/.vim/ftplugin/make.vim

~/.vimrc次のコマンドを使用して、ファイルタイププラグインが有効になっていることを確認する必要があります。

filetype plugin on

.vimrcおよび.vimディレクトリを整理整頓したい場合、この答えはより理にかなっています。
-Floby

0

常にタブを展開するようにvimを構成する方が簡単です。これは、メイクファイルを除くすべてのファイルに必要なものです。メイクファイルでは、任意の場所にタブを挿入するために使用できます。展開されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.