2009-05-21 22 views

risposta

47

Basta mettere le impostazioni nel file plugin filetype ~/.vim/ftplugin/LANGUAGE.vim. mio ~/.vim/ftplugin/perl.vim contiene le linee:

" 
" ---------- tabulator/shiftwidth -------------------- 
" Set tabulator and shift width to 4 (Perl Style Guide) 
" 
setlocal tabstop=4 
setlocal shiftwidth=4 
" 

Queste impostazioni saranno automaticamente in vigore per ogni file con il tipo di file 'perl' (nuovo o esistente).

+0

È triste che dobbiamo ancora avere ftplugin per farlo. – shabunc

+1

Perché? Questo approccio sembra pulito rispetto ad altri menzionati in altre risposte. – flyer88

+0

ftplugin è un ottimo approccio per questo – connorbode

9

In genere ciò che si fa è impostare un file di tipo vimrc speciale con le impostazioni per una lingua specifica, quindi utilizzare autocomandi nel file .vimrc principale per eseguire il vimrc speciale quando necessario. Ecco la mia configurazione per Haskell (.hs, ecc) file:

autocmd! BufNewFile,BufReadPre,FileReadPre *.hs so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.hsc so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.lhs so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.cabal so ~/.vim/haskell.vim 

mio ~/.vim/haskell.vim fa cose del genere "expandtab set" per utilizzare gli spazi al posto delle schede, e ogni sorta di altre magie per la formattazione e cose come questa. Spesso puoi scaricare versioni valide di queste per varie lingue da http://vim.org e altri siti.

Nota che puoi fare molto di più che modificare semplicemente le impostazioni di Vim. Ad esempio, è possibile eseguire il file attraverso un filtro prima e dopo la modifica:

" Edit gpg-encrypted ascii-armoured files 
autocmd! BufReadPre,FileReadPre  *.asc set bin 
autocmd BufReadPost,FileReadPost *.asc '[,']!gpg -q -d 
autocmd BufReadPost,FileReadPost *.asc set nobin 
autocmd! BufWritePre,FileWritePre *.asc set bin 
autocmd BufWritePre,FileWritePre *.asc '[,']!gpg -e 
autocmd BufWritePost,FileWritePost *.asc undo 
autocmd BufWritePost,FileWritePost *.asc set nobin 
+0

Grande, grazie. Ho intenzione di andare con questa soluzione invece di quella basata su ftplugin, perché questo sembra più pulito nel caso in cui ho più estensioni per i file che utilizzano la stessa lingua (come nel tuo esempio Haskell). –

+1

C'è un piccolo prezzo da pagare. I comandi source (ad esempio so ~/.vim/haskell.vim) verranno eseguiti ogni volta che si passa a un buffer di questo tipo. –

+4

Questa non è la soluzione corretta. La soluzione corretta consiste nell'utilizzare i ftplugin (non è necessario scrivere e mantenere autonomamente gli autocomandi) e (molto importante) nell'uso delle impostazioni locali. -> s #: set tabstop = #: setlocal tabstop = #. Vedi la risposta di fgm. Se la tua estensione non è riconosciuta come haskell, aggiorna la base dei tuoi file. Non vuoi che vim applichi l'evidenziazione della sintassi corretta ai tuoi file? –

20

La mia risposta è basata su this tip sul Wiki VIM. Questa risposta utilizza la directory "dopo" in modo da non dover utilizzare i file plugin forniti per diversi tipi di file.

Ad esempio, per specificare impostazioni personalizzate per i file Python, creare un file chiamato python.vim per contenere le impostazioni Python:

setlocal expandtab 
setlocal shiftwidth=4 
setlocal softtabstop=4 

Inserire questo file in entrambe le

  • ~/.vim/after/ftplugin (Linux)
  • $HOME/vimfiles/after/ftplugin (Windows)

E, infine, è necessario disporre di questo nella vostra .vimrc (Linux) o _vimrc (Windows):

filetype plugin indent on 
+0

Perché il downvote? –

+0

Per errore, se modifichi la tua risposta, posso inviarla di nuovo. –

+1

@BjornTipling - c'è quella modifica che hai richiesto un anno fa. :) –

60

Questi altre risposte sembrano troppo complessa. Invece di fare casino con ancora più directory e file nel tuo albero ~ /. Vim, aggiungi quanto segue al tuo ~/.vimrc.

autocmd Filetype python setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4 

(si può essere l33t e abbreviare i parametri per et ts=4 sw=4 sts=4). Ho trovato questo in Setting Vim whitespace preferences by filetype

+3

Risposta migliore IMO, grazie. – bryant

+1

Inoltre, più al punto di altri altri – cloying

+0

+1 per l'opzione di impostarlo da vimrc. Diventa più importante quando si utilizza un gestore di pacchetti vim (alla vundle) e non vorrebbe iniziare ad aggiungere la configurazione in luoghi oscuri ... –

2

Io uso il plugin editor config e aggiungi un file .editorconfig a tutti i miei progetti - vi permetterà di definire diverse impostazioni di rientro per i diversi progetti che utilizzano lo stesso linguaggio di programmazione che può essere utile come spesso diversi progetti nella stessa lingua hanno standard di codifica diversi.

potete vedere un esempio dei tipi di configurazione è possibile impostare qui: http://editorconfig.org/

+1

Ciò è grande perché un certo numero di altri editor supportano anche lo stesso file .editorconfig (atomo, testo sublime, webstorm, visualstudio, ecc. ecc.), quindi funziona bene su un team o un repository in cui le persone utilizzano tutti i diversi tipi di editor. – Charlino

Problemi correlati