Erreur Vim E138: impossible d'écrire le fichier viminfo $ HOME / .viminfo!

20

J'ai peur d'avoir rencontré quelque chose d'assez étrange. Lorsque j'ouvre un fichier normalement vim README.txt, tout va bien. Mais sudo vim README.txt, le fichier est vide et me donne une E138: Can't write viminfo file $HOME/.viminfo!erreur en essayant de quitter.

Je soupçonnais que le .viminfofichier était corrompu, alors je l'ai supprimé. Ce problème persiste. Quelqu'un peut-il aider?

James Adam Buckland
la source
Pouvez-vous publier le résultat lors de l'exécution ls .viminf*?
cuonglm
Quelles sont les autorisations sur le fichier viminfo? Quelle est la sortie de ls -la .vininf*?
darnir

Réponses:

29

Lorsque vous exécutez, sudo vimvous démarrez vim en tant que root. Cela signifie que c'est le fichier viminfo dans / root qui pose problème. Tu devrais faire rm /root/.viminf*.

Pour vous assurer de cela, exécutez sudo vimet exécuter cette commande: :!echo $HOME. Cela vous montrera que votre répertoire personnel est / root.

Je vous recommande de ne pas exécuter vim en tant que root, mais plutôt de l'utiliser sudoedit. Il s'agit d'une solution plus sécurisée car l'éditeur ne s'exécute pas en tant que root. Vous ne savez jamais ce qu'un plugin pourrait faire. De plus, il vous permet d'utiliser vos propres paramètres et plugins dans vim et non ceux dans root vimrc. sudoeditrevient à courir sudo -e. sudoedit fonctionne en créant une copie temporaire du fichier qui appartient à l'utilisateur appelant (vous). Une fois la modification terminée, les modifications sont écrites dans le fichier réel et le fichier temporaire est supprimé.

En règle générale: ne lancez pas les choses en tant que root si ce n'est pas nécessaire.

arnefm
la source
Je pense que vous m'avez peut-être sauvé d'un tas de soucis avec la note: "Ceci est une solution plus sécurisée car l'éditeur ne s'exécute pas en tant que root. Vous ne savez jamais ce qu'un plugin pourrait faire. " Je pensais avoir pensé à tout vulnérabilités, mais je me trompais.
bballdave025
14

J'ai cette erreur à chaque sortie. Je n'ai pas utilisé sudo. Il mentionnait explicitement mon répertoire personnel:

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

La suppression ~/.viminfon'a pas corrigé l'erreur.

Il s'avère que j'avais un tas de fichiers temporaires viminfo, et la suppression de ceux-ci a résolu le problème:

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

J'ai trouvé cette solution ici .

Henrik N
la source
5

J'ai reçu la même erreur en essayant :wqun fichier sur un disque qui était complètement plein. Si vous recevez ce message, vous souhaiterez peut-être vérifier votre espace disque disponible.

duhaime
la source
3

Une façon beaucoup plus propre de créer un répertoire personnel serait d'utiliser le squelette fourni par Linux par exemple.

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae
Meule
la source
1
Je crains que la question ait très peu à voir avec la création de répertoires personnels ...
John WH Smith
Vous devez créer un répertoire personnel pour que vim puisse enregistrer dans le fichier .viminfo, donc oui la commande ci-dessus est applicable.
Rick
1
Il existe d'innombrables raisons pour lesquelles ce fichier n'existerait pas avant que vous puissiez arriver à une telle conclusion. L'absence d'un répertoire personnel causerait probablement beaucoup plus de problèmes qu'un simple fichier manquant; pour cette raison, je pouvais répondre à presque toutes les questions sur les "fichiers manquants" avec "créer votre répertoire personnel". :)
John WH Smith
1
+1 Dans mon cas, cette erreur s'est produite exactement parce que je modifiais un fichier en tant qu'utilisateur qui n'avait pas de répertoire personnel.
Zoltán
3

Pour moi, le problème était que j'avais changé mon répertoire personnel en un emplacement à l'intérieur d'un montage NFS. Pour une raison quelconque, cela a eu pour conséquence que le propriétaire du répertoire est "personne". L'ajout d'autorisations d'écriture pour "autre" a résolu le problème car je n'étais clairement pas le propriétaire du fichier.

chmod o+w ~/.viminfo
Jon Deaton
la source
1
Pouvez-vous clarifier votre réponse. Les réponses en ligne ne comptent pas aussi bien en SE
Romeo Ninov
2
Étrange que l'ajout d' autres autorisations d'écriture vous ait aidé. Peut-être que vous ne possédiez pas votre propre fichier?
Jeff Schaller
Cela fonctionne pour moi. Je suppose que mon ".viminfo" a été créé par l'utilisateur "root" et si l'utilisateur "ubuntu" essaie de le modifier, il a besoin d'une autorisation d'écriture. En un mot, "-rw-r - r--" devient "-rw-r - rw-".
emeraldhieu
0

Cela se produit très probablement parce que le répertoire home a manqué d'espace disque et que toute nouvelle opération vim ne peut pas écrire dans le fichier .viminfo.

psglinux
la source
3
Cela semble un peu tiré par les cheveux: en avez-vous des preuves?
jasonwryan
C'est une possibilité, oui.
Ned64
0

J'ai eu le même problème lors de la mise à jour du contenu de Makefile. J'avais besoin d'une variable locale et j'ai décidé de la nommer HOME, alors j'ai entré la ligne HOME=2.154. Cela entraîne le vim-HOMEremplacement du paramètre par un répertoire inexistant. N'utilisez pas la HOMEvariable pour un autre usage.

user191855
la source
1
Veuillez noter qu'il HOMEs'agit d'une variable d'environnement prédéfinie et la redéfinir n'est généralement pas une bonne idée.
Barun
0

Je pense que cela ne peut s'appliquer qu'aux versions assez anciennes de linux / vi, mais ce que j'ai trouvé, c'est qu'il y avait des fichiers temporaires dans le répertoire principal de la racine avec les noms de fichiers /root/.viminfa.tmp ... /root/.viminfz.tmp et qu'il y en avait 26 avec des horodatages couvrant plusieurs années. Nous n'avions plus de lettres de l'alphabet car toutes les lettres az étaient prises. J'ai supprimé tous ces fichiers et le problème a disparu. Bien sûr, Henrik # rm -rf ~/.viminf* réglerait très bien ce problème.

Stephen Edge
la source
0

Il semble que vous ayez effacé les variables d'environnement.

Faites ceci:

export HOME = / root

Cela devrait résoudre votre problème.

Ashfaq
la source
0

Je ne sais pas comment je suis tombé sur ce scénario moi-même car je ne me souviens pas avoir ouvert de fichier en utilisant, sudo vimmais sur chacun :qd'un fichier, j'obtenais un message similaire `` Impossible d'écrire viminfo n'est pas accessible en écriture ''.

rm ~/.viminfone l'a pas résolu et ~/.vim/était vide.

chmod 666 ~/.viminforésolu ce message d'avertissement lors de la fermeture d'un fichier dans Vim. Bien que je ne sois pas certain que ce soit la meilleure solution? Il est logique pourquoi il a arrêté l'avertissement car .viminfo était rw ------ avant et je suppose qu'il est écrit dans les historiques de commandes vim.

David Tahvildaran
la source
0

Dans mon scénario, c'était l'absence totale de /root/.viminfofichier. Après avoir touché le fichier, l'erreur s'est arrêtée et le fichier a été mis à jour en quittant vim. PS: Il s'agit de Linux intégré à Windriver.

Naveen Gara
la source