Impostazione delle preferenze degli spazi bianchi di Vim in base al tipo di file


155

Nel mio lavoro, sono tenuto a seguire lo stile della casa per il rientro, che è il seguente:

  • 2 spazi durante la codifica html e ruby
  • schede durante la codifica di JavaScript, con tabwidth = 4 raccomandato

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


possibile duplicato del comportamento
acgtyrant,

Tutte queste risposte mi hanno solo reso più confuso. Il problema è che le opzioni sono all'altezza delle preferenze. La risposta accettata ha comunque una bella sintassi. Questa è stata una guida eccellente: vimcasts.org/transcripts/2/en
Mikael Lindlöf

Risposte:


245

ci sono molti modi, ma ecco un modo semplice e facile da capire. aggiungi queste righe al tuo ~/.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

27
ts = 'numero di spazi che <Tab> nel file usa' sts = 'numero di spazi che <Tab> usa durante la modifica di' sw = 'numero di spazi da usare per il passo (auto) del rientro' per dettagli vedi: vimdoc.sourceforge .net / htmldoc / quickref.html # option-list
zdsbs

Avevo bisogno di aggiungere expandtab almeno per il rubino, vedi la risposta di "troppo php" qui
Michael Durrant,

87

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

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

Nota anche:

  • Puoi creare i caratteri della scheda show di vim usando :set list.
  • Dopo aver impostato correttamente le opzioni di tabulazione / spazio, puoi fare in modo che vim ripari il file (sostituisci gli spazi con tabulazioni o viceversa) usando il :retab!comando.

2
Qual è il vantaggio di expandtaboversts=2
James McMahon,

12
@JamesMcMahon expandtab espande tutte le schede negli spazi. sts (softtabstop) inserisce spazi e tabulazioni per i rientri: tutte le schede che rientrano nel rientro in base alla dimensione del tabstop, quindi spazi successivi. Ovviamente, se expandtab è attivo, tutte le schede che vengono inserite vengono convertite in spazi. stackoverflow.com/questions/1562336/… potrebbe aiutare ulteriormente. Senza la scheda di espansione, la risposta di Peter inserisce schede di 2 caratteri di larghezza, non di spazi.
ajmccluskey,

35

+1 alla risposta di Peter, ma Vim offre anche un'altra soluzione. Se vuoi fare qualcosa di più complicato di un singolosetlocal , come impostare un sacco di opzioni, comandi e mappature contemporaneamente, la funzionalità del plugin filetype di vim viene in soccorso.

Devi avere filetype plugin ono filetype plugin indent onnel tuo .vimrc, quindi creare un plugin per esempio ruby ​​che puoi creare ~/.vim/ftplugin/ruby.vim. Tecnicamente è possibile utilizzare qualsiasi comando ti piace qui, per essere eseguito quando un file viene caricato di Ruby, ma quelli consigliati comprendono setlocal, map <buffer>,command -buffer , e le funzioni che definiscono. Molte più informazioni sono nella Guida per l'utente; se hai familiarità con lo scripting vim :help 41.11, passa a , altrimenti leggi :help usr_40e :help usr_41.


10

C'è anche un bel copione di Vim: DetectIndent che cerca di rilevare il rientro di un file che apri. È molto utile se lavori con molti file con diverso stile di codifica.

Uso un autocommand nel mio .vimrc :

:autocmd BufReadPost * :DetectIndent 

0

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

:set expandtab

Il prossimo passo è controllare il numero di spazi che verranno inseriti quando si preme il tasto tab, impostare l'opzione 'tabstop'. Ad esempio, per inserire 2 spazi per una scheda, utilizzare:

:set tabstop=2

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

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.