Comment spécifier les paramètres Vim pour tous les fichiers du répertoire actuel?
La solution idéale serait que Vim recherche et lise un .vimrc dans le répertoire courant avant de rechercher ~/.vimrc, et y applique les paramètres pour l'arborescence entière.
J'ai vu un plugin , mais cela signifie que les paramètres appliqués ne sont pas transparents car ils nécessitent l'installation du plugin. En revanche, une modeline est transparente car indépendamment du vimrc d'un utilisateur ou de l'invocation de vim spécifique, les paramètres de modeline seront appliqués pour ce fichier.
Les choses que j'ai essayées sont
:so vimrc
dans la modeline.Je suppose que les deux ne fonctionnent pas pour des raisons de sécurité. Je n'ai pas besoin de la pleine puissance d'un vimrc; être lié à des paramètres acceptables par une modélisation suffirait. Mon objectif est de permettre aux vimmers d'adopter plus facilement des normes de codage dans un projet.
Je suis un partisan de la façon plugin . Pour plusieurs raisons:
BTW, solution de sth peut être utilisé pour source un seul fichier de configuration. C'est très similaire à l'approche du plugin, sauf que le .vimrc doit être parasité avec des options non globales, et il ne prend pas facilement en charge les fichiers de configuration multiples/partagés.
Vous pouvez mettre quelque chose comme ça dans $VIM/vimrc
autocmd BufNewFile,BufRead /path/to/files/* set nowrap tabstop=4 shiftwidth=4
Je suggère fortement de ne pas utiliser set exrc
Même avec set secure
, sous * nix, vim exécutera toujours les autocommandes, Shell, et al, si vous possédez le fichier. Donc, si vous êtes prêt à éditer un fichier dans cette archive, je vous ai envoyé un .vimrc
contenant:
autocmd BufEnter * :silent! !echo rm -rf ~/
vous serez probablement moins amusé que moi.
Cette question est ancienne, mais elle semble être une préoccupation assez naturelle et persistante.
Ma solution est assez simple. Je place un .vimrc
fichier dans le répertoire racine de mes projets. La première ligne du .vimrc
le fichier source généralement ~/.vimrc
, puis ajoute la configuration particulière que je souhaite. Je alias tvim='vim -u .vimrc'
, et utilisez tvim
dans mes répertoires de projets personnels. "tvim" pour "trust vim", ce qui signifie que si je l'exécute dans un répertoire avec un .vimrc
fichier et quelque chose ne va pas, je n'ai personne à blâmer que moi-même, puisque j'ai dit explicitement que je lui faisais confiance. De plus, je garde un groupe de ceux-ci en mémoire afin que je puisse parfois simplement créer un lien logiciel vers celui que je veux pour un type de projet particulier.
Placer un .vimrc dans le répertoire de travail est en fait pris en charge, uniquement désactivé par défaut. Voir :h 'exrc'
Et :h startup
Pour plus de détails, le réglage de 'exrc'
Permettra la lecture de .vimrc
Dans le répertoire courant.
Il est également recommandé de :set secure
Lorsque vous l'utilisez. Cela verrouille :autocmd
, Shell et écrit des commandes pour .vimrc
Dans le répertoire courant.
Une autre chose qui mérite d'être étudiée est la configuration d'une session (:h session
) Avec une vue et des paramètres standard pour le projet.
Cela dit, j'irais probablement avec l'option plugin détaillée par Luc Hermitte moi-même.
Pour minimiser les risques de sécurité avec TOUTES les fonctionnalités "autorun" pour TOUT de nos jours, puis-je vous conseiller d'utiliser les fonctionnalités existantes de vim au lieu des plugins (bagages de portabilité)?
Par exemple.
Le fichier vimrc de mon dossier local est nommé "_gvimrc" (exprès). Cela réduit l'espoir pour des gens comme phen de s'amuser à nos dépens. :-)
Dans mon fichier $ VIM/.vimrc, j'ai inséré:
if filereadable("_gvimrc")
source _gvimrc
endif
à la fin.
J'utilise "filereadable ()" sur "fileexists ()" car le dernier a une certaine bizarrerie lorsqu'il est torturé en ouvrant plusieurs (10+) fichiers simultanément, (je ne sais pas pourquoi).
Bien sûr, vous pouvez donner votre propre nom de fichier unique pour obscurcir davantage les fauteurs de troubles potentiels. Tels que "_mygvimrc", "_gobbledygook", etc. Il vous suffit de choisir un nom standardisé et de le trouver en conséquence dans votre $ VIM/.vimrc. S'appuyer sur les internes vi/vim pour cela exclut les problèmes de portabilité. MAIS, NE le nommez pas .vimrc (ou _vimrc) pour empêcher le sourcing récursif au cas où vous éditez le fichier $ VIM/.vimrc avec vim plus tard.
Je l'utilise depuis Windoze 98SE, via Windork XP Pro, et maintenant Windorkier 7 (5+ années déjà). Je marquerai une liste de fichiers .txt dans l'Explorateur, puis j'utiliserai "Modifier avec multiple Vim ", ce qui entraîne l'ouverture simultanée de plusieurs fenêtres vim. Pour mon travail, je le fais plusieurs fois par jour, tous les jours. Tous les fichiers ont été traités avec ce que j'ai défini dans mon _gvimrc local.
En supposant que les gens n'ajoutent pas de fichiers tous les quelques jours, vous pouvez probablement ajouter une modélisation en haut de chaque fichier. En fait, si votre système de contrôle de version le permet, vous pourriez probablement appliquer une règle qui dit que chaque fichier doit avoir une modélisation lors de son archivage.
Je suis d'accord avec l'approche plugin pour des raisons de sécurité.
Il existe un très bon plugin qui n'a pas encore été mentionné. Il vous permet d'utiliser un .lvimrc
dans les répertoires de votre projet.
Essayez "localvimrc":
Essayez vim-localrc
~/
|- .local.vimrc (1)
`- project/
|- .local.vimrc (2)
`- src/
|- .local.vimrc (3)
`- main.c
https://github.com/thinca/vim-localrc/blob/master/doc/localrc.txt
Si les types de normes de codage que vous souhaitez appliquer sont liés au style d'indentation, à la taille des onglets, au format de fichier et au jeu de caractères, alors vous voudrez peut-être examiner "editorconfig" , qui est une norme multi-éditeur pour spécifier ce type de paramètres dans un projet spécifique et que tous les éditeurs suivent cette configuration.
La spécification "editorconfig" permet aux projets de demander différents paramètres en fonction des extensions de fichier ou des noms dans le projet. (Vous pouvez donc avoir des Makefiles en utilisant des TABs, vos Python utilisant 4 espaces et vos scripts Shell utilisant 2 espaces pour l'indentation.)
Vous avez besoin d'un plug-in pour utiliser "editorconfig" dans Vim. Le site officiel en fournit un, mais personnellement, je recommanderais sgur/vim-editorconfig , qui est écrit en pur Vimscript, donc vous n'avez pas trop à vous soucier des dépendances externes.
Étant donné que "editorconfig" vise la compatibilité entre les éditeurs, il est assez limité dans ce qu'il fait, donc si vous voulez un espace blanc cohérent, un format de fichier (DOS vs Unix) et un encodage (Unicode utf-8, etc.), alors "editorconfig " est pour toi.
J'ai regardé les plugins qui existaient et je n'ai pas vraiment aimé l'un d'eux, j'ai donc écrit une fonction simple qui s'appuie sur vim-fugitive . L'avantage de ceci est qu'il sait que la racine du projet est toujours la racine du référentiel, et en plus je peux hacher le fichier pour garder une table de confiance. Mettez simplement ce qui suit dans votre .vimrc
fichier.
function LoadRepoVimrc()
let l:path = fugitive#repo().tree('.vimrc')
if filereadable(l:path)
let l:sha1 = fugitive#repo().git_chomp('hash-object',l:path)
if !exists('g:SAFE_VIMRC') | let g:SAFE_VIMRC = {} | endif
if has_key(g:SAFE_VIMRC,l:path) && g:SAFE_VIMRC[l:path] ==? l:sha1
execute 'source '.fnameescape(l:path)
elseif confirm("Trust ".l:path."?", "&Yes\n&No",2) == 1
let g:SAFE_VIMRC[l:path] = l:sha1
execute 'source '.fnameescape(l:path)
else
execute 'sandbox source '.fnameescape(l:path)
endif
endif
endfunction
autocmd User FugitiveBoot call LoadRepoVimrc()
set viminfo ^= !
Si la !
est définie sur le paramètre viminfo
, puis sur SAFE_VIMRC
le dictionnaire sera conservé entre les exécutions (notez le ^
pour ajouter l'option afin qu'elle ne gâche pas l'option n
).