2009-10-13 20 views
128

Al mio lavoro, sono tenuto a seguire lo stile della casa per l'indentazione, che va come segue:Impostazione Vim preferenze spazi bianchi di filetype

  • 2 posti quando si scrive codice html e rubino
  • schede quando si scrive codice javascript, con tabwidth = 4 consigliato

Qual è il modo migliore per specificare le diverse preferenze di spazi bianchi per tipo di file?

+0

possibile duplicato del [Modifica Vim comportamento rientro per tipo di file] (http://stackoverflow.com/questions/158968/changing-vim-indentation-behavior-by-file-type) – acgtyrant

+0

Tutte queste risposte mi hanno reso più confuso. Il problema è che le opzioni sono di preferenza. La risposta accettata ha comunque una bella sintassi. Questa era un'ottima guida: http://vimcasts.org/transcripts/2/en/ – Mikuz

risposta

203

ci sono molti modi, ma ecco un modo semplice, facile da capire. aggiungere queste righe al ~/.vimrc:

autocmd Filetype html setlocal ts=2 sts=2 sw=2 
autocmd Filetype ruby setlocal ts=2 sts=2 sw=2 
autocmd Filetype javascript setlocal ts=4 sts=4 sw=4 
+5

+1 per: setlocal –

+1

Perfetto, grazie! – nelstrom

+20

ts = 'numero di spazi che nel file usa' 'il numero di spazi che utilizza durante la modifica' STS = sw = 'numero di spazi da utilizzare per (auto) passo trattino' per i dettagli si veda: http://vimdoc.sourceforge.net/htmldoc/quickref.html#option-list – zdsbs

32

+1 alla risposta di Pietro, ma Vim fornisce un'altra soluzione pure. Se vuoi fare qualcosa di più complicato di un singolo setlocal, come configurare un intero gruppo di opzioni, comandi e mappature contemporaneamente, allora la caratteristica del plugin per il tipo di file di vim viene in soccorso.

È necessario disporre di filetype plugin on o filetype plugin indent on nel proprio .vimrc, quindi creare un plug-in per es. rubino puoi creare ~/.vim/ftplugin/ruby.vim. Tecnicamente puoi utilizzare tutti i comandi che desideri qui, da eseguire quando viene caricato un file Ruby, ma quelli consigliati includono setlocal, map <buffer>, command -buffer e la definizione delle funzioni. Molte altre informazioni sono nella Guida dell'utente; se hai familiarità con lo script vim, passa a :help 41.11, altrimenti leggi :help usr_40 e :help usr_41.

+1

Grazie, mi dà molto da leggere. – nelstrom

72

La risposta di Peter è abbastanza semplice, ma sfortunatamente le opzioni non sono corrette. È necessario utilizzare le seguenti opzioni invece:

autocmd Filetype html setlocal ts=2 sw=2 expandtab 
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab 
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab 

Si noti inoltre:

  • Si può fare i caratteri di tabulazione vim spettacolo utilizzando :set list.
  • Una volta impostate correttamente le opzioni di tabulazione/spazio, è possibile eseguire la riparazione del file (sostituire gli spazi con le schede o viceversa) utilizzando il comando :retab!.
+2

Qual è il vantaggio di 'expandtab' su' sts = 2' –

+12

@JamesMcMahon expandtab espande tutte le schede in spazi. sts (softtabstop) inserisce spazi e tabulazioni per i rientri: tutte le schede che si adattano al rientro in base alle dimensioni del tabstop, e quindi gli spazi dopo. Naturalmente, se è attivo expandtab, tutte le schede che vengono inserite vengono convertite in spazi. http://stackoverflow.com/questions/1562336/tab-vs-space-preferences-in-vim potrebbe aiutare ulteriormente. Senza la scheda Espandi, la risposta di Peter inserirà schede di 2 caratteri di larghezza, non di spazi. – ajmccluskey

9

C'è anche un bel script vim: DetectIndent che tenta di rilevare il rientro di un file che si apre. È molto utile se lavori con molti file con uno stile di codifica diverso.

Io uso un autocomando nel mio Vimrc:

:autocmd BufReadPost * :DetectIndent 
0

Per inserire caratteri di spazio ogni volta che si preme il tasto di tabulazione, impostare l'opzione 'expandtab':

:set expandtab 

passo successivo è per controllare il numero di caratteri spazio che verranno inseriti quando viene premuto il tasto tab, imposta l'opzione 'tabstop'.Ad esempio, per inserire 2 spazio per una scheda, utilizzare:

:set tabstop=2 

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces