Pregunta:
Este es un problema de usabilidad que me ocurre a menudo:
Abro un archivo de sistema de solo lectura con vim, incluso editándolo, porque no estoy lo suficientemente atento o porque el vim en el sistema está mal configurado. Una vez que se realizan mis cambios, me quedo atascado en tener que escribirlos en un archivo temporal o perderlos, porque: w! no funcionará.
¿Existe un comando vim (: W !!!) que le permita escribir el búfer actual como superusuario? (Vim le pedirá su contraseña sudo o su naturalmente)
Respuesta:
:w !sudo tee % >/dev/null`
Explicación: !
Con !
, puede ejecutar programas. Al anteponerlo con: w, el contenido del archivo (las cosas 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 el >/dev/null
evita que el contenido se vuelva a imprimir en la pantalla (que es el comportamiento habitual de tee
).
Encontré un camino aún más corto. dd
no se imprime en stdout, por lo que puede guardar el elemento nulo.
:w !sudo dd of=%
Lo mismo es para :r
, que inserta la salida del comando dado, por lo que puede, por ejemplo, insertar la fecha actual en su archivo usando :r !date