utilisez gksudo au lieu de sudo pour GVim, c'est-à-dire
cmap w!! w !gksudo tee >/dev/null %
Souvent, lors de l'édition de fichiers de configuration, j'en ouvre un avec vi, puis lorsque je vais le sauvegarder, je me rends compte que je n'ai pas tapé
sudo vi filename
Existe-t-il un moyen de donner à vi sudo des privilèges pour enregistrer le fichier ? Il me semble me souvenir d'avoir vu quelque chose à ce sujet en cherchant des trucs sur vi il y a quelque temps, mais maintenant je ne le trouve pas.
utilisez gksudo au lieu de sudo pour GVim, c'est-à-dire
cmap w!! w !gksudo tee >/dev/null %
J'ai ceci dans mon ~/.bashrc :
alias svim='sudo vim'
Maintenant, chaque fois que j'ai besoin de modifier un fichier de configuration, je l'ouvre simplement avec svim.
%
est remplacé par le nom de fichier actuel, vous pouvez donc utiliser :
:w !sudo tee %
(vim
détectera que le fichier a été modifié et vous demandera si vous voulez qu'il soit rechargé.)
Comme raccourci, vous pouvez définir votre propre commande. Mettez ce qui suit dans votre .vimrc
:
command W w !sudo tee % >/dev/null
Avec ce qui précède, vous pouvez taper :W<Enter>
pour enregistrer le fichier. Depuis que j'ai écrit ceci, j'ai trouvé une façon plus agréable (à mon avis) de le faire :
cmap w!! w !sudo tee >/dev/null %
De cette façon, vous pouvez taper :w!!
et il sera étendu à la ligne de commande complète, en laissant le curseur à la fin, afin que vous puissiez remplacer le %
par un fichier votre propre nom, si vous le souhaitez.
Un hack rapide que vous pouvez envisager est de faire un chmod sur le fichier que vous éditez, enregistrez avec vim, puis chmod revenez à ce que le fichier était à l'origine.
ls -l test.file (to see the permissions of the file)
chmod 777 test.file
[This is where you save in vim]
chmod xxx test.file (restore the permissions you found in the first step)
Bien sûr, je ne recommande pas cette approche dans un système où vous vous souciez de la sécurité, car pendant quelques secondes, n'importe qui peut lire/modifier le fichier sans que vous vous en rendiez compte.
En général, vous ne pouvez pas modifier l'ID utilisateur effectif du processus vi, mais vous pouvez le faire :
:w !sudo tee myfile
Les conseils de Ryan sont généralement bons, cependant, si vous suivez l'étape 3, ne déplacez pas le fichier temporaire ; il aura le mauvais propriétaire et les mauvaises autorisations. Au lieu de cela, sudoedit
le fichier correct et lisez le contenu (en utilisant :r
ou similaire) du fichier temporaire.
Si vous suivez l'étape 2, utilisez :w!
pour forcer l'écriture du fichier.