Je peux utiliser vim -u filename
pour utiliser à la filename
place de ma valeur par défaut .vimrc
. J'utilise cette méthode lors du changement de contextes utilisateur ( su
) pour utiliser mon .vimrc
même si je cours en tant que superutilisateur.
Comment puis - je obtenir le même aussi pour le dossier qui est par défaut ~/.vim
pour que je puisse pointer Vim de la ligne de commande à un autre dossier?
Ce que je veux réaliser
D'accord, supposons user joe
( HOME=/home/joe
) et user root
( HOME=/root
). L'utilisateur joe
a un ensemble d'alias vim
qui ressemble à ceci (mais initialement défini en utilisant la $HOME
variable pour rendre cette dynamique):
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Ensuite, l'utilisateur joe
fait quelque chose dans le sens de sudo su -
(mais avec de la magie supplémentaire), ce qui entraîne le chargement des .bashrc
et d'autres goodies . L'utilisateur a maintenant exactement le même alias pour l' ensemble comme indiqué ci-dessus./home/joe
root
root
vim
Le problème est que cela .vimrc
est utilisé sur divers systèmes et dans divers scénarios. Souvent, le compte de Joe est appelé joe
, mais parfois ce sera quelque chose comme local.joe
ou quoi que ce soit d'autre, résultant en une valeur différente pour $HOME
. Donc, coder en dur un chemin absolu vers le ~/.vim
dossier ne semble pas être une bonne idée. Cependant, dans notre scénario ci-dessus, l'utilisateur root
ne possède pas de dossier /root/.vim
qui, cependant, devrait exister par défaut via le chargé .vimrc
( /home/joe/.vimrc
).
Ce que je veux réaliser - de préférence sur la ligne de commande - est de faire en sorte que Vim utilise des plugins, etc. /home/joe/.vim
quand il est démarré en root
(en supposant que la valeur alias
est définie comme indiqué - d'autres cas peuvent être ignorés). S'il existe une méthode dynamique via VimScript, veuillez fournir des pointeurs. Mais l'utilisation de variables telles que $HOME
conduirait à un catch 22, je pense.
la source
ln
. comme 'mv ~ / .vim ~ / .vim-quel que soit && ln -s ~ / .vim-quel que soit ~ / .vim` puis faites de même pour.vimrc
. envelopper tout cela avec un alias bash afin que vous puissiez facilement basculer dans un sens ou dans l'autreRéponses:
Vim regarde dans ~ / .vim parce que ce répertoire est dans la liste par défaut dans 'runtimepath', abrégé en 'rtp'. Pour dire à Vim de chercher ailleurs, vous devrez spécifier complètement une valeur 'rtp' différente, ou modifier la valeur par défaut en utilisant un appel à substitute () par exemple. Si vous voulez simplement que Vim recherche d'abord un autre endroit pour vos fichiers de configuration, ne vous souciez pas qu'il regarde également dans ~ / .vim, et ne vous souciez pas qu'il ne regarde pas dans votre répertoire alternatif après, la commande est assez simple:
Voir
Remplacer .vim par votre répertoire alternatif demande un peu plus de frappe.
J'ai essayé de remplacer
~/.vim
par un autre chemin, mais je ne pouvais pas faire correspondre le~
, alors j'ai continué et affiché ce que j'avais.Éditer
La raison pour laquelle je ne pouvais pas faire correspondre la
~
valeur de «rtp» est que lorsque la valeur est obtenue comme valeur de&rtp
plutôt que comme sortie de:set rtp?
, la~
est étendue au nom de chemin complet du répertoire personnel de l'utilisateur. Il n'y~
en a pas dans le résultat.Les œuvres suivantes.
la source
\\~
fait le travail. Une évasion pour Bash, je pense? Quoi qu'il en soit, cela ne fonctionne toujours pas, car quelque chose est différent sur la façon dont VimScript gère le~
.:set rtp?
"~ / .vim" s'affiche, mais qu'il se:echo &rtp
développe~
jusqu'au nom de chemin complet. Le texte suivant semble fonctionner: `vim --cmd 'let & rtp = substitute (& rtp, $ HOME." / \. Vim "," Alternate "," g ")'. Je mettrai à jour ma réponse.Dans le .vimrc que vous choisissez, vous pouvez spécifier le chemin d'exécution:
Si vous utilisez votre personne,
.vimrc
vous pouvez définir cela dans votre.vim
répertoire personnel et cela devrait fonctionner à la fois commesu
et votre compte normal.la source
$HOME
dans mon propre compte, il se résoudrait à/home/joe
mais en tant que root à/root
... donc rien n'est gagné. Cela.vimrc
est censé fonctionner sur toutes les plateformes et versions de Vim et définir un chemin absolu rompt totalement cela. Merci d'avoir pris le temps de répondre..bashrc
, pourriez-vous définir une variable, par exemple$REALHOME
, qui est exemptée de lasudo
reset_env
, puis l'utiliser comme base pourrtp
?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'