Me temo que me he encontrado con algo bastante extraño. Cuando abro un archivo normalmente vim README.txt
, todo está bien. Pero luego sudo vim README.txt
, el archivo se pone en blanco y me da un E138: Can't write viminfo file $HOME/.viminfo!
error al intentar salir.
Sospeché que el .viminfo
archivo estaba dañado, así que lo eliminé. Este problema persiste. ¿Alguien puede ayudar?
permissions
vim
sudo
root
James Adam Buckland
fuente
fuente
ls .viminf*
?ls -la .vininf*
?Respuestas:
Cuando ejecuta
sudo vim
, inicia vim como root. Eso significa que el problema es el archivo viminfo en / root. Deberías hacerrm /root/.viminf*
.Para asegurarse de esto, ejecute
sudo vim
y ejecute este comando::!echo $HOME
. Esto le mostrará que su directorio de inicio es / root.Recomendaría que no ejecute vim como root, sino que lo use
sudoedit
. Esta es una solución más segura ya que el editor no se ejecuta como root. Nunca se sabe lo que podría hacer un complemento. Además, le permite usar su propia configuración y complementos en vim y no los de root vimrc.sudoedit
es lo mismo que corrersudo -e
. sudoedit funciona haciendo una copia temporal del archivo que es propiedad del usuario que invoca (usted). Cuando termina de editar, los cambios se escriben en el archivo real y se elimina el archivo temporal.Como regla general: no ejecute cosas como root si no es necesario.
fuente
Recibí este error en cada salida. No lo usé
sudo
. Mencionó explícitamente mi directorio de inicio de usuario:Quitando
~/.viminfo
no solucionó el error.Resulta que tenía un montón de archivos temporales de viminfo, y eliminarlos solucionó el problema:
Encontré esta solución aquí .
fuente
Recibí el mismo error al intentar
:wq
un archivo en un disco que estaba completamente lleno. Si recibe este mensaje, puede consultar su espacio disponible en disco.fuente
Una forma mucho más limpia de crear un directorio de inicio sería utilizar el esqueleto que Linux le proporciona, por ejemplo.
fuente
Para mí, el problema era que había cambiado mi directorio de inicio a la ubicación dentro de un montaje NFS. Por alguna razón, esto resultó en que el propietario del directorio fuera "nadie". Agregar permisos de escritura para "otros" resolvió el problema, ya que claramente no era el propietario del archivo.
fuente
Lo más probable es que esto esté sucediendo porque el directorio de inicio se ha quedado sin espacio en disco y cualquier nueva operación vim no puede escribir en el archivo .viminfo.
fuente
Tuve el mismo problema al actualizar el contenido de Makefile. Necesitaba una variable local y decidí nombrarla
HOME
, así que entré en la líneaHOME=2.154
. Esto hace que lavim-HOME
configuración sea reemplazada por un directorio no existente. No use laHOME
variable para otro uso.fuente
HOME
es una variable de entorno predefinida y redefinirla generalmente no es una buena idea.Creo que esto solo puede aplicarse a versiones bastante antiguas de linux / vi, pero lo que encontré fue que había archivos temporales en el directorio de inicio de la raíz con los nombres de archivo /root/.viminfa.tmp ... /root/.viminfz.tmp y que había 26 de ellos con marcas de tiempo que abarcaban varios años. Nos habíamos quedado sin letras del alfabeto ya que se tomaron todas las letras az. Eliminé todos esos archivos y el problema desapareció. Por supuesto, Henrik
# rm -rf ~/.viminf*
solucionaría este problema muy bien.fuente
Parece que ha borrado las variables de entorno.
Hacer esto:
exportar INICIO = / root
Esto debería resolver su problema.
fuente
No estoy seguro de cómo encontré este escenario yo mismo, ya que no recuerdo haber abierto ningún archivo usando,
sudo vim
pero en cada uno:q
de los archivos recibí un mensaje similar: 'No se puede escribir viminfo no se puede escribir'.rm ~/.viminfo
no lo resolvió y~/.vim/
estaba vacío.chmod 666 ~/.viminfo
resolvió ese mensaje de advertencia al salir de un archivo en Vim. ¿Aunque no estoy seguro de que esta sea la mejor solución? Tiene sentido por qué detuvo la advertencia ya que .viminfo era rw ------ antes y supongo que se está escribiendo con historiales de comandos vim.fuente
En mi escenario, fue la ausencia de
/root/.viminfo
archivo por completo. Después de tocar el archivo, el error se detuvo y el archivo se actualizó al salir de vim. PD: Esto es windriver integrado en Linux.fuente