Come posso modificare il rientro predefinito in base al tipo di file?


34

Vorrei avere diversi rientri in base al tipo di file su cui sto lavorando. Ad esempio, lavorando su un .cfile vorrei che il mio rientro fosse di 4 spazi. Nei .htmlfile vorrei (devo) lavorare con le schede.

Come ci riesco?

Risposte:


25

Il metodo migliore è inserire tali impostazioni ~/.vim/after/ftplugin/<filetype>.vim.

Per HTML (supponendo che tu voglia schede di 4 caratteri):

~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

L'utilizzo di un ftplugin è preferibile all'uso dei autocomandi perché Vim esegue già controlli del tipo di file da solo e cerca già di procurarsi il ftplugin adeguato, quindi non c'è motivo di forzare ulteriori controlli e reimplementare la ruota.

-- modificare --

Supponendo che tu abbia filetype plugin onnel tuo vimrc- che dovresti - Vim proverà a rilevare il tipo di file dei file che modifichi e, una volta trovato il tipo di file corretto e impostato per il buffer, proverà a trovare il corrispondente ftplugin in queste posizioni standard:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

Tutto ciò accade automaticamente , quindi, se il tuo tipo di file è riconosciuto da Vim, non c'è assolutamente alcun motivo per aggiungere alcuna logica di rilevamento del tipo di file: basta aggiungere le tue impostazioni al ftplugin giusto e sei a posto.


Devo attivare il ftplugin in qualche modo o la creazione dei file lo attiverà automaticamente?
DeltaLima,

Assicurati di avere filetype plugin indent onnel tuo vimrc.
Romainl,

1
@DeltaLima vim ha un percorso che attraversa per verificare le impostazioni. Finché filetype plugin onè impostato, il percorso di vim include i file ftplugin/<filetype>.vime after/ftplugin/<filetype>/vimnel suo percorso.
davidlowryduda,

@DeltaLima, per favore vedi la mia modifica.
Romainl,

14

Puoi farlo con i comandi automatici nel tuo .vimrc.

Ad esempio, ho una funzione html_like_modeche imposta varie cose per la modifica di file HTML. Nel mio .vimrcho:

au BufNewFile,BufRead *.html call s:html_like_mode()

Che si stacca dall'estensione del file. Puoi anche disattivare il tipo di file, se hai abilitato quello:

au FileType perl setlocal equalprg=perltidy

Come puoi vedere, puoi fargli fare qualsiasi comando lì. Quindi potresti facilmente fare una setlocal shiftwidth 4per i tuoi file * .c.


9

augroupconsente di raggruppare i autocomandi correlati in gruppi denominati. (Vedi qui per informazioni sui gruppi di autocomando.) Usiamo augroups per aggiungere i autocomandi ~/.vimrcin un modo che non aggiunga un duplicato ogni volta che lo procuriamo.

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4

2
Sarebbe utile se spiegassi cosa fa e come configurarlo, non tutti lo sapranno;)
Seth,

3

Usato autocmd e FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
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.