Modifica del comportamento dell’indentazione di Vim in base al tipo di file

Qualcuno potrebbe spiegarmi in termini semplici il modo più semplice per modificare il comportamento dell’indentazione di Vim in base al tipo di file? Ad esempio, se apro un file Python dovrebbe rientrare con 2 spazi, ma se apro uno script PowerShell dovrebbe usare 4 spazi.

È ansible aggiungere file .vim da eseguire ogni volta che vim passa a un determinato tipo di file.

Ad esempio, ho un file ~/.vim/after/ftplugin/html.vim con questo contenuto:

 setlocal shiftwidth=2 setlocal tabstop=2 

Il che fa sì che vim utilizzi tabs con una larghezza di 2 caratteri per il rientro (l’opzione noexpandtab è impostata globalmente altrove nella mia configurazione).

Questo è descritto qui: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4 , scorrere verso il basso fino alla sezione sui plugin di tipo file.

Usa ftplugins o autocommands per impostare le opzioni. (: h ftplugin per ulteriori informazioni)

In ~ / .vim / ftplugin / python.vim:

 setlocal sw=2 sts=2 et 

E non dimenticare di triggersrli in ~ / .vimrc

 filetype plugin indent on 

O in ~ / .vimrc

 au FileType python setl sw=2 sts=2 et 

Vorrei anche suggerire di imparare la differenza tra “ts” e “sts”. Molte persone non sanno di “sts”.

modifica il tuo ~/.vimrc e aggiungi diversi tipi di file per i diversi rientri, ad esempio voglio html/rb indent per 2 spazi e rientri file js/coffee per 4 spazi:

 " by default, the indent is 2 spaces. set shiftwidth=2 set softtabstop=2 set tabstop=2 " for html/rb files, 2 spaces autocmd Filetype html setlocal ts=2 sw=2 expandtab autocmd Filetype ruby setlocal ts=2 sw=2 expandtab " for js/coffee/jade files, 4 spaces autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab 

fare riferimento a: Impostazione delle preferenze dello spazio bianco Vim in base al tipo di file

Inserisci comandi autocmd in base al suffisso del file in ~ / .vimrc

 autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab autocmd BufRead,BufNewFile *.pl syntax on 

I comandi che stai cercando sono probabilmente ts = e sw =

Di solito lavoro con expandtab set, ma non va bene per i makefile. Ho aggiunto di recente:

 :autocmd FileType make set noexpandtab 

alla fine del mio file .vimrc e riconosce Makefile, makefile e * .mk come makefile e non espande le tabs. Presumibilmente, puoi estenderlo.

Sono sempre stupito da persone che cambiano le dimensioni delle tabs per diversi tipi di file. Cosa diavolo fai quando guardi un file usando meno?

Personalmente, utilizzo queste impostazioni in .vimrc:

 autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab 

Questo potrebbe essere conosciuto dalla maggior parte di noi, ma comunque (sono rimasto perplesso la mia prima volta): Fare :set et ( :set expandtabs) non cambia le tabs già esistenti nel file, si deve fare :retab . Per esempio:

 :set et :retab 

e le tabs nel file sono sostituite da spazi sufficienti. Per avere le tabs indietro, semplicemente:

 :set noet :retab 

Mentre puoi configurare il rientro di Vim bene usando il plug-in indent o manualmente usando le impostazioni, ti consiglio di usare uno script python chiamato Vindect che imposta automaticamente le impostazioni rilevanti per te quando apri un file python. Utilizzare questo suggerimento per rendere ancora più efficace l’uso di Vindect. Quando ho iniziato a modificare i file python creati da altri con vari stili di indentazione (tab vs spazio e numero di spazi), era incredibilmente frustrante. Ma Vindect con questo file di rientro

Raccomanda anche:

  • pythonhelper
  • python_match
  • python_ifold

Oggi puoi provare con editorconfig , c’è anche un plugin vim per questo. Con questo, non solo è ansible modificare le dimensioni dell’indentazione in vim, ma in molti altri editor, mantenere stili di codifica coerenti.

Di seguito è riportato un semplice editorconfig, come potete vedere, i file python avranno 4 spazi per il rientro e i file template di pug avranno solo 2.

 # 4 space indentation for python files [*.py] indent_style = space indent_size = 4 # 2 space indentation for pug templates [*.pug] indent_size = 2 

Io uso un programma di utilità che ho scritto in C chiamato autotab . Analizza le prime migliaia di righe di un file che si carica e determina i valori per i parametri Vim shiftwidth , tabstop ed expandtab .

Questo viene compilato usando, per esempio, gcc -O autotab.c -o autotab . Le istruzioni per l’integrazione con Vim sono nell’intestazione del commento in alto.

L’autotab è abbastanza intelligente, ma può essere confuso di volta in volta, in particolare da quello che è stato mantenuto in modo incoerente usando diversi stili di indentazione.

Se un file utilizza evidentemente tab, o una combinazione di tabulazioni e spazi, per il rientro, Autotab determinerà quale dimensione di tabulazione viene utilizzata considerando fattori come l’allineamento di elementi interni su righe successive, come i commenti.

Funziona per una varietà di linguaggi di programmazione ed è indulgente per elementi “fuori banda” che non rispettano gli incrementi dell’indentazione, come le direttive di pre-elaborazione C, le etichette delle istruzioni C, per non parlare delle ovvie righe vuote.