A veces empiezo a editar archivos de configuración /etc
usando Vim, pero me olvido de usar sudo
para iniciar Vim. El resultado inevitable es que después de terminar mis ediciones me encuentro con el temido aviso de que no tengo permiso para guardar el archivo.
En su mayoría, las ediciones son lo suficientemente pequeñas como para que salga de Vim y vuelva a hacer todo como root. Por supuesto, podría guardar en una ubicación en la que pueda escribir y luego copiar como raíz, pero eso también es algo molesto.
Pero estoy seguro de que hay una manera más fácil de convertirse en root o usar sudo
desde Vim, sin tener que descartar los cambios. Si el método no dependiera de sudo
estar configurado para el usuario, eso sería aún mejor.
sudoedit
lugar devim
para toda la edición administrativa. Es una forma de nunca más tener este problema :). +1 por la respuesta de Gilles .Respuestas:
sudo no puede cambiar el usuario efectivo de un proceso existente, siempre crea un nuevo proceso que tiene los privilegios elevados y el shell original no se ve afectado. Esto es fundamental en el diseño de UNIX. La mayoría de las veces solo guardo el archivo en / tmp como solución alternativa. Si realmente desea guardarlo directamente, puede intentar usar una función de Vim donde pueda canalizar un archivo a otro proceso. Intenta guardar con este comando:
Probado y funciona. Luego, Vim le pedirá que vuelva a cargar el archivo, pero no es necesario: puede presionar opara evitar recargar y perder su historial de deshacer. Incluso puede guardar esto en un comando / función Vim o incluso vincularlo a una tecla para facilitar el acceso, pero lo dejaré como un ejercicio para el lector.
fuente
%
, que en vim será la ruta del archivo que está editando actualmente.%
comillas en caso de que el nombre del archivo contenga un espacio.'modified'
configuración; puedes hacerlo manualmente conset nomodified
.exec 'w !sudo dd of=' . shellescape(expand('%'))
en caso de que el nombre de archivo contiene citas, barras invertidas, dólar-signos, etc.Guardar el archivo como root:
fuente
Llame
sudoedit
para editar archivos como root.Piense en las molestias al llamar
vim
directamente como una advertencia de que está siendo demasiado casual al hacer algo potencialmente peligroso.fuente
Puedes poner esto en tu
.vimrc
Lo activa haciendo
:w!!
: empujará el archivosudo tee
al nombre de archivo actual (%
).Desde https://stackoverflow.com/questions/95072/what-are-your-favorite-vim-tricks
fuente
!sudo sponge %
.Esto también funciona bien:
Esto está inspirado en el comentario de @Nathan Long en esta respuesta .
AVISO :
"
debe usarse en lugar de'
porque queremos%
expandirnos antes de pasar a shell.fuente