vundle "filetype plugin indent on" mess avec tabwidth

9

J'ai installé vundle hier et depuis que je l'ai fait, la largeur de tabulation que j'ai configurée dans mon vimrc est ignorée et remise à 4 au lieu de 2.

J'ai découvert que la ligne suivante après le paragraphe vundle le provoque:

filetype plugin indent on

Mon retrait est configuré comme ceci:

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

Vous pouvez consulter mon vimrc complet ici .

J'ai testé le problème d'indentation en utilisant un script python (où l'indentation est vraiment importante).

J'ai déjà essayé de passer filetype plugin indent onà filetype plugin onmais cela ne change rien. Seul le fait de commenter cette ligne aide.
Maintenant, le guide d'installation de vundle indique que cette ligne est requise.

Comment résoudre ce problème de retrait? Puis-je simplement supprimer la ligne de type de fichier ou est-il vraiment obligatoire de la conserver dans le vimrc?

Solution:

Grâce à @ChristianBrabandt et @romainl, j'ai maintenant trouvé une solution qui peut également résider dans un seul fichier 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
wullxz
la source
Même si cela ne répond pas à votre question, j'ai essayé avec vim-plug au lieu de Vundle et cela a parfaitement fonctionné ...
nobe4
2
Voir la FAQ
Christian Brabandt
Vous pouvez également utiliser la nouvelle commande automatique OptionSet pour réinitialiser le paramètre shiftwidth et softtabstop
Christian Brabandt

Réponses:

10

Tout d'abord; la ligne ci-dessous n'a absolument rien à voir avec Vundle ou la gestion des plugins:

filetype plugin indent on

Cette commande fait trois choses:

  • active la détection des types de fichiers,
  • active les scripts spécifiques au type de fichier (ftplugins),
  • active les scripts de retrait spécifiques au type de fichier.

Cette ligne est là parce que certains gestionnaires de plugins doivent s'assurer que la détection de type de fichier est désactivée avant de faire leur magie et utiliser Vim pour la programmation serait beaucoup plus difficile sans ftplugins et sans indentation appropriée. À mon avis, ils devraient simplement gérer la détection de type de fichier en interne, mais bien…

Quoi qu'il en soit, votre problème est dû à des plugins ft trop possessifs qui remplacent vos paramètres d'indentation par les leurs. Le ftplugin python est le coupable le plus courant car il a été décidé il n'y a pas longtemps qu'il devait appliquer PEP8.

La solution la plus simple consisterait à éviter de se procurer complètement des plugins ftp:

filetype indent on

mais ils viennent généralement avec des trucs utiles, donc cette méthode n'est pas vraiment recommandée.

La solution la plus propre est de laisser la filetypeligne dans son état "optimal":

filetype plugin indent on

et remplacez leurs remplacements par les vôtres 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

Remarques:

  • J'ai supprimé smartindentcar ce n'est pas si intelligent au début et de toute façon déconseillé par les scripts de retrait spécifiques au type de fichier.
  • J'ai remplacé vos :executecommandes par des :letcommandes plus propres pour éviter une concaténation inutile.
romainl
la source
1
Si vous définissez shiftwidthà zéro et softtabstopà -1, il suivra le paramètre tabstop.
Christian Brabandt
merci pour vos explications. Je souhaite conserver la plupart de mes paramètres dans mon vimrc car je souhaite les synchroniser avec plusieurs ordinateurs. J'ai utilisé votre solution dans mon vimrc et utilisé le lien faq @ChristianBrabandt posté ci-dessous ma question et cela fonctionne. Je vais modifier ma question pour inclure ma solution.
wullxz
4

Le problème d'indentation vient du ftplugin, qui charge un fichier .vim /usr/share/vim/vim-version-/ftplugin/-filetype-.vimqui remplace tout ce que vous avez dans votre .vimrcfichier. vous pouvez savoir où se trouve ce fichier en exécutant la commande suivante dans vim :verbose set tabstop?. La sortie vous dirigera vers le fichier qui remplace votre configuration.

Dans mon cas, j'avais des problèmes avec ma configuration d'indentation python.

Un moyen simple de résoudre ce problème consiste à procéder comme suit:

Créez un dossier .vim dans votre dossier d'accueil (si vous ne l'avez pas)

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

Ajoutez ce qui suit:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

Modifiez ce que vous voulez dans la commande. Le mien ressemble à ça parce que je travaille avec des tabulations au lieu d'espaces.

ysdelahoz
la source