Il y a un projet de programmation sur lequel je travaille où tout le monde utilise une taille de tabulation de 4, donc je le trouve le plus simple set tabstop=4
dans mon ~/.vimrc
. Cependant, je préfère que cela n'affecte pas tous les fichiers que je modifie - uniquement ceux de ce projet - disons chaque fichier dans un certain répertoire (et ses sous-répertoires).
Existe-t-il un moyen de définir facilement des variables de manière conditionnelle en fonction du préfixe de répertoire du fichier?
Réponses:
Configuration centrale
Si vous pouvez configurer les exceptions locales de manière centralisée, vous pouvez placer ces autocmds dans votre
~/.vimrc
:D'un autre côté, si vous voulez que la configuration spécifique soit stockée avec le projet (et que vous ne voulez pas l'intégrer dans tous les fichiers via des modelines ), vous avez les deux options suivantes:
Configuration locale avec fonctionnalité intégrée
Si vous démarrez toujours Vim à partir du répertoire racine du projet, le
permet la lecture d'un
.vimrc
fichier depuis le répertoire courant. Vous pouvez y placer les:set ts=4 sw=4
commandes.Configuration locale via le plugin
Sinon, vous avez besoin de l'aide d'un plugin; il y en a plusieurs sur vim.org; Je peux recommander le plugin localrc , qui permet même une configuration locale spécifique au type de fichier .
Notez que la lecture de la configuration à partir du système de fichiers a des implications de sécurité; vous voudrez peut-être
:set secure
.la source
autocmd
méthode qui ne fonctionne pas, assurez-vous que vous n'avez pas de lien symbolique sur votre chemin - j'ai dû mettre le chemin complet sans lien symbolique avant qu'il ne fonctionne pour moi (sur OS X 10.9)Vous pouvez configurer vim pour lire d'autres commandes à l'aide de la commande
source
(so). Ajoutez ceci à votre~/.vimrc
- il recherche le répertoire courant et si le fichier .vimrc_proj est introuvable, il recherche .vimrc_proj dans le répertoire parent.Ajoutez ensuite toutes les commandes personnalisées dans les
.vimrc_proj
fichiers de configuration en fonction de vos projets.la source
Vous pouvez utiliser un plugin pour Vim pour résoudre le problème d'une manière plus générale en essayant de détecter l'indentation.
Le plugin de choix pour moi est DetectIndent . Il m'a fallu un certain temps pour tester toutes les fourches du plugin pour en trouver une qui correspond à mes besoins. L'original était vraiment proche mais pas tout à fait donc j'ai fait ma propre fourche .
Pour le débogage, il est très utile de
:set verbose=1
relancer le plugin avec:DetectIndent
la source
Une solution possible qui n'a pas encore été mentionnée est d'aller un niveau au-dessus et d'implémenter des scripts shell spécifiques au projet pour lancer votre environnement vim.
Cela permet aux paramètres spécifiques à vim d'être passés à l'aide de l'
-S
option de ligne de commande. L'avantage est qu'il permet également de configurer d'autres aspects de l'environnement, tels que les paramètres du terminal ou du cscope.Par exemple, disons que j'ai un projet C ++ appelé
foo
, pour lequel je veux charger les paramètres vim du fichier~/.vim/projects/foo.vim
. Je veux également configurer un index cscope et lancer une fenêtre de terminal si la commande est invoquée à partir d'un outil de lancement rapide ou d'un raccourci sur le bureau. Pour ouvrir mon environnement, j'ai le script suivant, appelévim-foo
:la source