Parfois, je commence à éditer les files de configuration dans /etc
utilisant Vim, mais j'oublie d'utiliser sudo
pour démarrer Vim. Le résultat inévitable est alors qu'après avoir terminé mes modifications, je rencontre l'avis redouté que je n'ai pas l'autorisation de sauvegarder le file.
La plupart du time, les modifications sont assez petites pour que je sois juste sorti de Vim et que je fasse tout le rest en tant que root. Je pourrais bien sûr save dans un endroit où je peux écrire et ensuite copyr en tant que root, mais c'est aussi un peu gênant.
Mais je suis sûr qu'il existe un moyen plus simple de devenir root ou d'utiliser sudo
à l'intérieur de Vim, sans devoir abandonner les changements. Si la méthode ne reposait pas sur sudo
étant mis en place pour l'user qui serait encore mieux.
sudo ne peut pas changer l'user effectif d'un process existant, il crée toujours un nouveau process qui a les privilèges élevés et le shell d'origine n'est pas affecté. Ceci est un élément fondamental de la design UNIX. Le plus souvent, je sauvegarde le file dans / tmp comme solution de contournement. Si vous voulez vraiment le sauvegarder directement, vous pouvez essayer d'utiliser une fonctionnalité de Vim, où il peut diriger un file vers un autre process. Essayez d'save avec cette command:
:w !sudo dd of=%
Testé et fonctionne. Vim vous requestra alors de recharger le file, mais ce n'est pas nécessaire: vous pouvez simplement appuyer sur o pour éviter de recharger et de perdre votre historique d'annulation. Vous pouvez même save ceci dans une command / fonction de Vim ou même la lier à une key pour un access facile, mais je vais laisser cela comme un exercice au lecteur.
Enregistrer le file en tant que root:
: w! sudo tee%
Appelez sudoedit
pour éditer les files en tant que root.
Pensez à la gêne occasionnée lorsque vous appelez directement vim
comme avertissement que vous êtes trop décontracté pour faire quelque chose de potentiellement dangereux.
Vous pouvez mettre ceci dans votre .vimrc
cmap w!! %!sudo tee > /dev/null %
Vous le triggersz en faisant :w!!
– il va pousser le file à travers sudo tee
vers le nom de file courant ( %
).
De https://stackoverflow.com/questions/95072/what-are-your-favorite-vim-sortingcks
Cela fonctionne aussi bien:
:w !sudo sh -c "cat > %"
Ceci est inspiré par le commentaire de @Nathan Long dans cette réponse .
AVIS :
"
doit être utilisé à la place de '
parce que nous voulons que %
soit développé avant de passer en shell.