web-dev-qa-db-fra.com

Devenir la racine de l'intérieur vim

Parfois, je commence à modifier les fichiers de configuration dans /etc Utiliser Vim, mais oubliez d'utiliser Sudo pour lancer Vim. Le résultat inévitable est alors que, après avoir terminé mes modifications, je rencontre la préavis redoutée que je n'ai pas la permission de sauvegarder le fichier.

Pour la plupart des modifications, les modifications sont suffisamment petites que je sortais simplement de Vim et que tout recommencez comme la racine. Je pouvais bien entendu enregistrer sur un endroit que je peux écrire, puis copier en tant que root, mais c'est aussi un peu gênant.

Mais je suis sûr qu'il y a un moyen plus facile de devenir root ou d'utiliser Sudo de l'intérieur Vim, sans avoir à supprimer les changements. Si la méthode ne s'appuierait pas sur Sudo étant configurée pour l'utilisateur qui serait encore meilleur.

72
Mad Scientist

SUDO ne peut pas modifier l'utilisateur effectif d'un processus existant, il crée toujours un nouveau processus qui a les privilèges élevés et la coque d'origine n'est pas affectée. C'est un élément fondamental de la conception UNIX. J'ai le plus souvent simplement enregistrer le fichier sur/TMP comme solution de contournement. Si vous souhaitez vraiment l'enregistrer directement, vous pouvez essayer d'utiliser une fonctionnalité de VIM où il peut piquer un fichier à un autre processus. Essayez d'économiser avec cette commande:

:w !Sudo dd of=%

Testé et fonctionne. Vim vous demandera ensuite de recharger le fichier, mais il est inutile: vous pouvez simplement appuyer sur o pour éviter de recharger et de perdre vos antécédents d'annulation. Vous pouvez même enregistrer cela sur une commande/une fonction Vim ou même la lier à une clé pour un accès facile, mais je laisserai cela comme un exercice au lecteur.

47
penguin359

Call sudoedit Pour modifier les fichiers en tant que root.

Pensez à la gêne occasionnée lorsque vous appelez vim directement comme un avertissement que vous êtes trop décontracté pour faire quelque chose de potentiellement dangereux.

Vous pouvez mettre cela dans votre .vimrc

cmap w!! %!Sudo tee > /dev/null %

Vous le déclenchez en faisant :w!! - Il appuiera le fichier via Sudo tee au nom de fichier actuel (%).

À partir d'un post désormais supprimé à https://stackoverflow.com/questions/95072/what-are-your-favorite-vim-tricks ; Voir aussi: https://stackoverflow.com/questions/1218390/What-is-Your- plus -productive-shortcut-with-vim

8
Hamish Downer

Cela fonctionne également bien:

:w !Sudo sh -c "cat > %"

Ceci est inspiré par le commentaire de @nathan Long dans ceci Réponse .

[~ # ~] AVIS [~ # ~]:

" doit être utilisé au lieu de ' parce que nous voulons % Pour être élargi avant de passer à la coquille.

3
feihu