Error de Vim E138: ¡No se puede escribir el archivo viminfo $ HOME / .viminfo!

20

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 .viminfoarchivo estaba dañado, así que lo eliminé. Este problema persiste. ¿Alguien puede ayudar?

James Adam Buckland
fuente
¿Se puede publicar el resultado cuando se ejecuta ls .viminf*?
Cuonglm
¿Cuáles son los permisos en el archivo viminfo? ¿Cuál es la salida de ls -la .vininf*?
darnir

Respuestas:

29

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 vimy 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. sudoedites lo mismo que correr sudo -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.

arnefm
fuente
Creo que podría haberme salvado de un montón de preocupaciones con la nota: "Esta es una solución más segura ya que el editor no se está ejecutando como root. Nunca se sabe lo que podría hacer un complemento " . Creí que había pensado en todo vulnerabilidades, pero estaba equivocado.
bballdave025
14

Recibí este error en cada salida. No lo usé sudo. Mencionó explícitamente mi directorio de inicio de usuario:

E138: Can't write viminfo file /Users/henrik/.viminfo!

Quitando ~/.viminfo no solucionó el error.

Resulta que tenía un montón de archivos temporales de viminfo, y eliminarlos solucionó el problema:

 ls ~/.viminf*      # If you want to see the files.
 rm -rf ~/.viminf*  # Remove them.

Encontré esta solución aquí .

Henrik N
fuente
5

Recibí el mismo error al intentar :wqun archivo en un disco que estaba completamente lleno. Si recibe este mensaje, puede consultar su espacio disponible en disco.

duhaime
fuente
3

Una forma mucho más limpia de crear un directorio de inicio sería utilizar el esqueleto que Linux le proporciona, por ejemplo.

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae
Almiar
fuente
1
Me temo que la pregunta tiene muy poco que ver con la creación de directorios de inicio ...
John WH Smith
Debe crear un directorio de inicio para que vim pueda guardar en el archivo .viminfo, así que sí, el comando anterior es aplicable.
Rick
1
Hay innumerables razones por las cuales este archivo no existiría, antes de que pueda llegar a tal conclusión. La ausencia de un directorio de inicio probablemente causaría muchos más problemas que solo un archivo faltante; Por esta razón, podría responder a cualquier pregunta de "archivo faltante" con "crear su directorio personal". :)
John WH Smith
1
+1 En mi caso, este error ocurrió exactamente porque estaba editando un archivo como usuario que no tenía un directorio de inicio.
Zoltán
3

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.

chmod o+w ~/.viminfo
Jon Deaton
fuente
1
¿Puedes por favor aclarar tu respuesta? Las respuestas de Oneline no cuentan tan bien en SE
Romeo Ninov
2
Es extraño que agregar otros permisos de escritura te haya ayudado. ¿Quizás no tenías tu propio archivo?
Jeff Schaller
Esto funciona para mi. Supongo que mi ".viminfo" fue creado por el usuario "root" y si el usuario "ubuntu" intenta modificarlo, necesita un permiso de escritura. En pocas palabras, "-rw-r - r--" se convierte en "-rw-r - rw-".
emeraldhieu
0

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.

psglinux
fuente
3
Eso parece un poco exagerado: ¿tiene alguna evidencia de eso?
jasonwryan
Esa es una posibilidad, sí.
Ned64
0

Tuve el mismo problema al actualizar el contenido de Makefile. Necesitaba una variable local y decidí nombrarla HOME, así que entré en la línea HOME=2.154. Esto hace que la vim-HOMEconfiguración sea reemplazada por un directorio no existente. No use la HOMEvariable para otro uso.

usuario191855
fuente
1
Tenga en cuenta que HOMEes una variable de entorno predefinida y redefinirla generalmente no es una buena idea.
Barun
0

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.

Stephen Edge
fuente
0

Parece que ha borrado las variables de entorno.

Hacer esto:

exportar INICIO = / root

Esto debería resolver su problema.

Ashfaq
fuente
0

No estoy seguro de cómo encontré este escenario yo mismo, ya que no recuerdo haber abierto ningún archivo usando, sudo vimpero en cada uno :qde los archivos recibí un mensaje similar: 'No se puede escribir viminfo no se puede escribir'.

rm ~/.viminfono lo resolvió y ~/.vim/estaba vacío.

chmod 666 ~/.viminforesolvió 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.

David Tahvildaran
fuente
0

En mi escenario, fue la ausencia de /root/.viminfoarchivo 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.

Naveen Gara
fuente