Bagaimana cara mengatur vim untuk mengedit file kode Makefile dan normal?

22

Saya menggunakan Mac OSX 10.7.5, isi .vimrc adalah sebagai berikut:

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

autocmd FileType make setlocal noexpandtab

Apa yang saya coba lakukan adalah ketika saya mengedit file normal seperti .js, .html Saya ingin tab saya diindentasi dengan 4 spasi kosong alih-alih tab normal.

Tetapi ketika saya mengedit Makefile, saya membutuhkannya menjadi tab normal, bukan 4 spasi kosong untuk lekukan.

Saya pikir pengaturan di atas di .vimrc akan memberi saya itu, tetapi tidak berfungsi untuk saya seperti ketika saya mengedit Makefile saya masih mendapatkan 4 ruang kosong untuk lekukan.

Tidak yakin apa yang saya lakukan salah di sini?

badut hutan
sumber

Jawaban:

26

Ini adalah bagian dari saya .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

Bagian harus jelas, tetapi saya sarankan Anda membaca bantuan vim pada filetypedan autocmd.

Baris yang paling relevan bagi Anda, mungkin yang ini:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

pastikan deteksi tipe file diaktifkan.

polemon
sumber
Terima kasih untuk autocommands yang luar biasa! Aku melihat di tutorial ini sambil belajar dari Anda .vimrcbahwa jika Anda tidak membungkus Anda autocmddalam augroupbagian, Vim akan membaca ini dan duplikat mereka. Apakah ini benar?
Joshua Detwiler
6

Alih-alih melakukan ini dengan autocmds, Anda bisa membuat plugin filetype pengguna Anda sendiri untuk setiap filetype, dan letakkan di ~/.vim/ftplugin/<filetype>.vim, di mana <filetype>jenis file aktual yang Anda inginkan. Sebagai contoh:

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

Anda perlu memastikan bahwa plugin filetype Anda telah diaktifkan di Anda ~/.vimrcdengan perintah berikut:

filetype plugin on
Heptite
sumber
Jawaban ini lebih masuk akal jika Anda ingin menjaga direktori .vimrc dan .vim Anda rapi.
Floby
0

Lebih mudah untuk mengkonfigurasi vim untuk selalu memperluas tab, yang diinginkan untuk semua file kecuali makefile. Di makefiles, Anda dapat menggunakan untuk memasukkan tab di mana pun Anda inginkan. Itu tidak akan diperluas.

zeozod
sumber