Paramètres et plugins lorsque root (`sudo vim`)?

15

C'est vraiment frustrant quand j'ai besoin de modifier un fichier en tant que root et d'utiliser sudo vim somefile.confet que je ne peux utiliser aucun de mes raccourcis clavier, paramètres et plugins.

Existe-t-il un moyen d'obtenir toutes mes personnalisations lorsque je dois modifier en tant que root?

J'utilise vim-plug pour mes plugins.

Robbie Wxyz
la source
5
Sur une note latérale: sudo vim fileest mieux écrit comme sudo -e file(à condition que vous définissiez la variable d'environnement EDITOR=vim).
lcd047
@ lcd047: vous devriez faire ce commentaire dans une réponse
static_rtti

Réponses:

15

Plutôt que d'ouvrir vim en tant que root, vous pouvez simplement enregistrer en tant que root en redirigeant vers tee. Voici un exemple:

:w !sudo tee % > /dev/null

Cela peut être utile comme alias dans votre .vimrc, j'utilise :Sw:

command! -nargs=0 Sw w !sudo tee % > /dev/null
user530873
la source
4
Ceci est utile pour le I did a bunch of editing and then realized I should have used sudoedit, mais pour le cas général, je suggère d'utiliser sudo -e/ sudoedit.
jamessan
7

Deux choses:

  1. Utilisez $ sudo -e filepour éditer fileavec $EDITOR. Ajouter export EDITOR=/path/to/vimsi $EDITORn'est pas déjà défini.

  2. Going vanilla est un excellent moyen de lutter contre la dépendance à vos plugins.

romainl
la source
-1 pour avoir suggéré la récupération de l'addiction au plugin (J / K, pas de downvote vraiment)
Robbie Wxyz
3
Notez que cela ne lance pas vim en tant que root, comme le sudo vimfait. L'édition se produit en tant qu'utilisateur normal, puis sudo gère la mise à jour du fichier d'origine.
jamessan
Remarque: il existe deux options similaires à sudo: -Eet -e. -Esignifie "environnement de préservation", et ce n'est pas celui que vous souhaitez. -e, à son tour, signifie "ne pas exécuter une commande, mais éditer un fichier avec une procédure définie".
iksemyonov
3

Il semble que tout ce que vous avez à faire est de créer un lien symbolique entre la racine ~/.vimrcet la ~/.vim/vôtre.

Exécutez simplement en tant que root:

ln -s /home/<user>/.vimrc /root/.vimrc
ln -s /home/<user>/.vim/ /root/.vim/

Et ça devrait le faire!

(PS, j'ai compris cela tout à l'heure et je voulais partager avec d'autres noobs. S'il vous plaît laissez-moi savoir s'il y a une meilleure façon.)

Robbie Wxyz
la source
1
Cela peut souvent causer des problèmes dans la mesure où certains fichiers liés à vim seront écrits en tant que root dans votre répertoire personnel et plus tard, vous rencontrerez des erreurs en essayant d'exécuter votre propre configuration vim en tant que votre propre utilisateur.
Caleb
0

Si vous savez à l'avance que vous devez modifier un fichier en tant que root, utilisez les commandes sudoedit <file>ou sudo -e <file>vous obtiendrez une configuration dans un environnement spécial pour le faire avec vos préférences d'édition habituelles. Une copie du fichier est faite et votre éditeur est lancé pour le modifier (en tant qu'utilisateur). Lorsque vous quittez, le fichier est recopié à son emplacement d'origine en tant que root.

C'est la manière la plus sûre et recommandée, mais dans le cas où a) vous ne vous rendez pas compte à l'avance, vous devrez écrire en tant que root ou b) vouloir éditer et enregistrer les modifications incrémentielles en place, vous aurez besoin d'autre chose. À cette fin, la solution sudo tee proposée par smpl est définitivement sur la bonne voie, mais il existe quelques améliorations mineures qui peuvent être apportées pour gérer les cas de bord. Notamment, la différence dans la gestion de l'invite de mot de passe sudo dans une interface graphique par rapport aux interfaces de console mérite une certaine attention.

Un moyen plus simple de configurer cela est d'utiliser le plugin vim-eunuch . Il a ce problème particulier et quelques autres choses pratiques regroupées dans un package pratique. L'utilisation est aussi simple que d'appeler :SudoWrite. J'utilise même un mappage d'accès légèrement plus pratique:

cmap w!! call SudoWrite()

Cela devrait vous permettre d'écrire un fichier en tant que root en utilisant :w!!.

Caleb
la source
-1

Une autre option consiste à exécuter sudo -E vim somefile.confpour modifier, ce qui préservera votre environnement, donc vos .vimrcplugins et seront utilisés.

RSabet
la source
Hé, bonne astuce! C'est très utile pour Vi et beaucoup d'autres commandes.
Robbie Wxyz
3
Cela a les mêmes effets secondaires que de lier votre configuration dans le répertoire personnel de root: à savoir que toutes les opérations ou plugins vim qui écrivent des données d'état le feront dans votre répertoire personnel. Ces fichiers finissent par appartenir à root et provoqueront des erreurs plus tard, car votre utilisateur normal ne pourra pas continuer à les utiliser.
Caleb