¿Escribir archivo vim como superusuario?

10

Este es un problema de usabilidad que me sucede a menudo:

Abro un archivo de sistema de solo lectura con vim, incluso lo edito, porque no estoy lo suficientemente atento o porque el vim en el sistema está mal configurado. Una vez que mis cambios están hechos, me veo obligado a escribirlos en un archivo temporal o perderlos, porque: w! no funciona

¿Existe un comando vim (: W !!!) que le permite escribir el búfer actual como superusuario? (Vim pediría su sudo o su contraseña naturalmente)

Zimbatm
fuente
preguntas relacionadas (duplicados no exactos): superuser.com/questions/23428/vim-sudo-vim-bad-idea .. superuser.com/questions/106865/… .. y desde SO, stackoverflow.com/questions/1005 / ...
quack quijote
1
El SO definitivamente es un engaño, sin embargo, las dos preguntas SU abordan un problema separado resuelto con el sudoeditcomando. Esta pregunta se centra más en olvidarse de escribirla en primer lugar y elevarla después de iniciar el editor.
heavyd

Respuestas:

15
:w !sudo tee % >/dev/null`

Explicación: Con !, puede ejecutar programas. Al prefijarlo con: w, el contenido del archivo (lo que tiene en vim, no el archivo original, más precisamente: el búfer) se le dará al comando en la entrada estándar. %se reemplaza por el nombre del archivo y >/dev/nullevita que el contenido se vuelva a imprimir en la pantalla (que es el comportamiento habitual de tee).

He encontrado un camino aún más corto. ddno se imprime en stdout para que pueda guardar lo nulo.

:w !sudo dd of=%

Lo mismo es para :r, que inserta la salida del comando dado, por lo que puede insertar, por ejemplo, la fecha actual en su archivo utilizando:r !date

Mariana
fuente
¡Muchas gracias, me hiciste la vida mucho mejor! (Brian también)
zimbatm
Acabo de agregar un segundo método.
Marian
Eso es realmente genial!
Anthony Giorgio
no funciona con undofiles
Christian Brabandt
5

Tratar:

:w !sudo tee % >/dev/null
Brian
fuente