Domanda

Qualcuno potrebbe spiegarmi in termini semplici il modo più semplice per modificare il comportamento di rientro 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.

È stato utile?

Soluzione

Puoi aggiungere i file .vim da eseguire ogni volta che vim passa a un particolare 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 le schede con una larghezza di 2 caratteri per il rientro (l'opzione noexpandtab è impostata a livello globale altrove nella mia configurazione).

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

Altri suggerimenti

Usa ftplugins o autocommands per impostare le opzioni.

ftplugin

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

setlocal shiftwidth=2 softtabstop=2 expandtab

E non dimenticare di attivarli in ~ / .vimrc :

filetype plugin indent on

(: h ftplugin per ulteriori informazioni)

autocomando

In ~ / .vimrc :

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

Puoi sostituire uno qualsiasi dei comandi o impostazioni lunghi con le loro versioni brevi:
autocmd : au
setlocal : setl
shiftwidth : sw
tabstop : ts
softtabstop : sts
expandtab : et

Suggerirei anche di imparare la differenza tra tabstop e softtabstop . Molte persone non sanno di softtabstop .

modifica il tuo ~ / .vimrc e aggiungi diversi tipi di file per rientri diversi, ad es. Voglio il rientro html / rb per 2 spazi e il rientro dei 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 i comandi autocmd in base al suffisso del file nel tuo ~ / .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. Di recente ho aggiunto:

:autocmd FileType make set noexpandtab

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

Sono sempre stupito dalle persone che cambiano la dimensione delle schede 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 noto alla maggior parte di noi, ma comunque (ero perplesso la prima volta): Fare : set et (: set expandtabs) non cambia le schede già esistenti nel file, si deve fare : retab . Ad esempio:

:set et
:retab

e le schede nel file sono sostituite da spazi sufficienti. Per riavere le schede semplicemente:

:set noet
:retab

Oggi puoi provare editorconfig , c'è anche un plugin vim per questo. Con questo, sei in grado non solo di modificare le dimensioni del rientro in vim, ma in molti altri editor, mantenere stili di codifica coerenti.

Di seguito è riportato un semplice editorconfig, come puoi vedere, i file python avranno 4 spazi per il rientro e i file modello pug ne 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

Mentre puoi configurare il rientro di Vim bene usando il plugin 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. Usa questo suggerimento per rendere ancora più efficace l'utilizzo di Vindect. Quando ho iniziato a modificare i file Python creati da altri con vari stili di rientro (tab vs spazio e numero di spazi), è stato incredibilmente frustrante. Ma Vindect insieme a questo file di rientro

Consiglia anche:

Uso un'utilità che ho scritto in C chiamato autotab . Analizza le prime poche migliaia di righe di un file che carichi e determina i valori per i parametri Vim shiftwidth , tabstop e expandtab .

Questo è compilato usando, ad 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 perché sono stati mantenuti in modo incoerente utilizzando diversi stili di rientro.

Se un file usa evidentemente tabulazioni, o una combinazione di tabulazioni e spazi, per il rientro, Autotab capirà quale dimensione di tabulazione viene usata considerando fattori come l'allineamento di elementi interni attraverso linee successive, come i commenti.

Funziona con una varietà di linguaggi di programmazione e sta perdonando per "fuori banda" elementi che non obbediscono agli incrementi di rientro, come le direttive di preelaborazione C, le etichette delle dichiarazioni C, per non parlare delle ovvie righe vuote.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top