Devenir racine de l'intérieur de Vim

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.