Come configurare vim per modificare sia Makefile sia i normali file di codice?


22

Sto usando Mac OSX 10.7.5, il contenuto di .vimrc è il seguente:

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

autocmd FileType make setlocal noexpandtab

Quello che sto cercando di fare è quando modifico file normali come .js, .html Voglio che le mie schede siano rientrate con 4 spazi vuoti invece di una normale scheda.

Ma quando sto modificando Makefile, ho bisogno che sia una scheda normale anziché 4 spazi vuoti per i rientri.

Ho pensato che la configurazione sopra in .vimrc mi avrebbe dato questo, ma non funziona per me come quando sto modificando Makefile ricevo ancora 4 spazi vuoti per il rientro.

Non sei sicuro di cosa sto facendo di sbagliato qui?

Risposte:


26

Questa è una sezione del mio .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

La sezione deve essere auto-esplicativo, ma vi consiglio di leggere l'aiuto vim su filetypee autocmd.

La linea più rilevante per te è probabilmente questa:

autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0

assicurati però che il rilevamento del tipo di file sia attivato.


Grazie per gli eccellenti autocomandi! Ho notato in questo tutorial mentre imparavo dal tuo .vimrcche se non avvolgi le tue autocmds in augroupsezioni, Vim le leggerà e le duplicherà. È corretto?
Joshua Detwiler,

6

Invece di farlo con autocmds, è possibile creare il proprio plug-in del tipo di file utente per ciascun tipo di file e posizionarlo ~/.vim/ftplugin/<filetype>.vimdove si <filetype>trova il tipo di file desiderato. Per esempio:

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

Devi assicurarti di avere plug-in di tipo di file abilitato nel tuo ~/.vimrccon il seguente comando:

filetype plugin on

Questa risposta ha più senso se ti piace mantenere in ordine le tue directory .vimrc e .vim.
Floby,

0

È più semplice configurare vim per espandere sempre le schede, che è ciò che si desidera per tutti i file tranne i makefile. Nei makefile, puoi usare per inserire una scheda dove vuoi. Non sarà espanso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.