vundle "filetype plugin indent on" si scherza con la larghezza di banda


9

Ho installato vundle ieri e da quando l'ho fatto, la larghezza di banda che ho configurato nel mio vimrc viene ignorata e ripristinata a 4 anziché a 2.

Ho scoperto che la seguente riga dopo il paragrafo vundle lo sta causando:

filetype plugin indent on

Il mio rientro è impostato in questo modo:

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

Puoi controllare il mio video completo qui .

Ho testato il problema del rientro usando uno script Python (dove il rientro conta davvero).

Ho già provato a cambiare filetype plugin indent ona filetype plugin onma che non cambia nulla. Solo commentare quella riga aiuta.
Ora, la guida all'installazione di Vundle dice che questa linea è obbligatoria.

Come posso risolvere questo problema di rientro? Posso semplicemente inserire la riga del tipo di file o è davvero obbligatorio tenerlo nel vimrc?

Soluzione:

Grazie a @ChristianBrabandt e @romainl ora ho trovato una soluzione che può anche risiedere in un singolo file vimrc:

filetype plugin indent on

[...]

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth

Anche se non risponde alla tua domanda, ho provato con vim-plug invece di Vundle e ha funzionato perfettamente ...
nobe4


È inoltre possibile utilizzare il nuovo comando automatico OptionSet per ripristinare l'impostazione della larghezza del cambio e del softtabstop
Christian

Risposte:


10

Cominciando dall'inizio; la riga seguente non ha assolutamente nulla a che fare con la gestione di Vundle o plugin:

filetype plugin indent on

Quel comando fa tre cose:

  • abilita il rilevamento del tipo di file,
  • abilita script specifici del tipo di file (ftplugins),
  • abilita gli script di rientro specifici del tipo di file.

Quella linea è lì perché alcuni gestori di plugin devono assicurarsi che il rilevamento del tipo di file sia disabilitato prima di fare la loro magia e l'uso di Vim per la programmazione farebbe molto più schifo senza ftplugins e il rientro corretto. Ritengo che dovrebbero semplicemente occuparsi del rilevamento del tipo di file internamente ma bene ...

Ad ogni modo, il tuo problema è causato da ftplugin troppo possessivi che sovrascrivono le tue impostazioni di rientro con le loro. Python ftplugin è il colpevole più comune perché è stato deciso non molto tempo fa che avrebbe dovuto applicare PEP8.

La semplice via d'uscita sarebbe quella di evitare del tutto il reperimento di ftplugins:

filetype indent on

ma di solito vengono con cose utili, quindi questo metodo non è davvero raccomandato.

La soluzione più pulita è lasciare la filetypelinea nel suo stato "ottimale":

filetype plugin indent on

e sovrascrivi le loro sostituzioni con le tue after/ftplugin/python.vim:

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

Appunti:

  • Ho rimosso smartindentperché non è poi così intelligente e deprecato dagli script di rientro specifici del tipo di file.
  • Ho sostituito i tuoi :executecomandi con :letcomandi più puliti per evitare inutili concatenazioni.

1
Se si imposta shiftwidthsu zero e softtabstopsu -1, seguirà l'impostazione tabstop.
Christian Brabandt,

grazie per le tue spiegazioni. Vorrei mantenere la maggior parte delle mie impostazioni nel mio vimrc perché voglio sincronizzarle su più computer. Ho usato la tua soluzione nel mio vimrc e ho usato il link faq @ChristianBrabandt pubblicato sotto la mia domanda e funziona. Modificherò la mia domanda per includere la mia soluzione.
Wullxz,

4

Il problema del rientro deriva dal ftplugin, che carica un file .vim /usr/share/vim/vim-version-/ftplugin/-filetype-.vimche sovrascrive qualunque cosa tu abbia nel tuo .vimrcfile. puoi scoprire dove si trova quel file eseguendo il seguente comando all'interno di vim :verbose set tabstop?. L'output indicherà il file che sovrascrive la configurazione.

Nel mio caso stavo riscontrando problemi con la mia configurazione di rientro in Python.

Un modo semplice per risolvere questo è quello di fare quanto segue:

Crea una cartella .vim nella tua cartella home (se non ce l'hai)

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

Aggiungi quanto segue:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

Modifica quello che vuoi nel comando. Il mio sembra così perché lavoro con le schede anziché con gli spazi bianchi.

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.