Vim-Fehler E138: Viminfo-Datei $ HOME / .viminfo kann nicht geschrieben werden!

20

Ich fürchte, ich bin auf etwas Seltsames gestoßen. Wenn ich eine Datei normal öffne, vim README.txtist alles in Ordnung. Bei diesem Vorgang sudo vim README.txtwird die Datei jedoch leer und es wird ein E138: Can't write viminfo file $HOME/.viminfo!Fehler angezeigt, wenn ich versuche, das Programm zu beenden.

Ich habe vermutet, dass die .viminfoDatei beschädigt ist und habe sie gelöscht. Dieses Problem bleibt bestehen. Kann jemand helfen?

James Adam Buckland
quelle
Können Sie das Ergebnis beim Laufen posten ls .viminf*?
Cuonglm
Was sind die Berechtigungen für die Viminfo-Datei? Was ist die Ausgabe von ls -la .vininf*?
Darnir

Antworten:

29

Wenn Sie ausführen sudo vim, starten Sie vim als root. Das heißt, es ist die viminfo-Datei in / root, die das Problem darstellt. Das solltest du tun rm /root/.viminf*.

Um sicherzustellen , dass dies zu machen, laufen sudo vimund führen Sie diesen Befehl aus : :!echo $HOME. Dies zeigt Ihnen, dass Ihr Ausgangsverzeichnis / root ist.

Ich würde empfehlen, dass Sie vim nicht als root ausführen, sondern verwenden sudoedit. Dies ist eine sicherere Lösung, da der Editor nicht als Root ausgeführt wird. Sie wissen nie, was ein Plugin tun könnte. Außerdem können Sie Ihre eigenen Einstellungen und Plugins in vim verwenden und nicht die in Roots vimrc. sudoeditist das gleiche wie Laufen sudo -e. sudoedit erstellt eine temporäre Kopie der Datei, die dem aufrufenden Benutzer (Ihnen) gehört. Nach Abschluss der Bearbeitung werden die Änderungen in die eigentliche Datei geschrieben und die temporäre Datei gelöscht.

Als allgemeine Faustregel gilt: Führen Sie keine Dinge als root aus, wenn dies nicht erforderlich ist.

Arnefm
quelle
Ich glaube, Sie haben mich mit der Notiz "Dies ist eine sicherere Lösung, da der Editor nicht als Root ausgeführt wird. Sie wissen nie, was ein Plugin tun könnte. " Vor ein paar Sorgen bewahrt. Ich glaubte, an alles gedacht zu haben Schwachstellen, aber ich habe mich geirrt.
bballdave025
14

Ich habe diesen Fehler bei jedem Verlassen erhalten. Ich habe nicht verwendet sudo. Es erwähnte explizit mein Benutzerverzeichnis:

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

Durch das Entfernen wurde ~/.viminfoder Fehler nicht behoben.

Es stellte sich heraus, dass ich eine Reihe von viminfo-temporären Dateien hatte, und das Entfernen dieser Dateien behebte das Problem:

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

Habe diese Lösung hier gefunden .

Henrik N
quelle
5

Ich habe den gleichen Fehler erhalten, als ich versucht habe, :wqeine Datei auf einer vollständig vollen Festplatte zu erstellen. Wenn Sie diese Nachricht erhalten, möchten Sie möglicherweise den verfügbaren Speicherplatz überprüfen.

duhaime
quelle
3

Eine viel sauberere Möglichkeit, ein Home-Verzeichnis zu erstellen, ist beispielsweise die Verwendung des von Linux bereitgestellten Skeletts.

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae
Rick
quelle
1
Ich fürchte, die Frage hat sehr wenig mit der Erstellung von Home-Verzeichnissen zu tun ...
John WH Smith
Sie müssen ein Ausgangsverzeichnis erstellen, damit vim in der .viminfo-Datei speichern kann. Daher gilt der obige Befehl.
Rick
1
Es gibt unzählige Gründe, warum diese Datei nicht existiert, bevor Sie zu einer solchen Schlussfolgerung gelangen können. Das Fehlen eines Basisverzeichnisses würde wahrscheinlich viel mehr Probleme verursachen als nur eine fehlende Datei. mit diesem grund konnte ich so ziemlich jede "fehlende datei" frage mit "erstelle dein heimatverzeichnis" beantworten. :)
John WH Smith
1
+1 In meinem Fall ist dieser Fehler genau deshalb aufgetreten, weil ich eine Datei als Benutzer bearbeitet habe, der kein Basisverzeichnis hatte.
Zoltán,
3

Für mich bestand das Problem darin, dass ich mein Basisverzeichnis in einen Speicherort innerhalb eines NFS-Mount geändert hatte. Aus irgendeinem Grund hatte dies zur Folge, dass der Eigentümer des Verzeichnisses "niemand" war. Das Hinzufügen von Schreibrechten für "andere" löste das Problem, da ich eindeutig nicht der Eigentümer der Datei war.

chmod o+w ~/.viminfo
Jon Deaton
quelle
1
Können Sie bitte Ihre Antwort klären. Online-Antworten zählen in SE nicht als gut
Romeo Ninov
2
Seltsam, dass Ihnen das Hinzufügen anderer Schreibrechte geholfen hat. Vielleicht besaßen Sie keine eigene Datei?
Jeff Schaller
Das funktioniert bei mir. Ich vermute, mein ".viminfo" wurde vom Benutzer "root" erstellt und wenn der Benutzer "ubuntu" versucht, es zu ändern, benötigt er eine Schreibberechtigung. Kurz gesagt, "-rw-r - r--" wird "-rw-r - rw-".
Smaragdhieu
0

Dies ist höchstwahrscheinlich darauf zurückzuführen, dass im Ausgangsverzeichnis nicht mehr genügend Speicherplatz vorhanden ist und neue vim-Vorgänge nicht in die .viminfo-Datei schreiben können.

psglinux
quelle
3
Das scheint ein bisschen weit hergeholt: Haben Sie Beweise dafür?
Jasonwryan
Das ist eine Möglichkeit, ja.
Ned64
0

Ich hatte das gleiche Problem beim Aktualisieren des Inhalts von Makefile. Ich brauchte eine lokale Variable und beschloss, sie zu benennen HOME, also gab ich die Zeile ein HOME=2.154. Dadurch wird die vim-HOMEEinstellung durch ein nicht vorhandenes Verzeichnis ersetzt. Verwenden Sie die HOMEVariable nicht für andere Zwecke.

user191855
quelle
1
Bitte beachten Sie, dass HOMEes sich um eine vordefinierte Umgebungsvariable handelt und eine Neudefinition in der Regel keine gute Idee ist.
Barun
0

Ich denke, dass dies nur für ziemlich alte Versionen von Linux / vi gilt, aber ich fand heraus, dass sich temporäre Dateien im Stammverzeichnis mit den Dateinamen /root/.viminfa.tmp ... /root/.viminfz.tmp und befinden Es gab 26 davon mit mehrjährigen Zeitstempeln. Uns waren die Buchstaben des Alphabets ausgegangen, als alles von az genommen wurde. Ich habe alle diese Dateien entfernt und das Problem ist verschwunden. Natürlich # rm -rf ~/.viminf* würde Henriks dieses Problem in Ordnung bringen.

Stephen Edge
quelle
0

Anscheinend haben Sie Umgebungsvariablen gelöscht.

Mach das:

export HOME = / root

Dies sollte Ihr Problem beheben.

Ashfaq
quelle
0

Ich bin mir nicht sicher, wie ich auf dieses Szenario gestoßen bin, da ich mich nicht daran erinnere, Dateien mit geöffnet zu haben, sudo vimaber für jede :qDatei wurde eine ähnliche Meldung angezeigt: "Viminfo kann nicht geschrieben werden, kann nicht geschrieben werden".

rm ~/.viminfohat es nicht gelöst und ~/.vim/war leer.

chmod 666 ~/.viminfoDie Warnmeldung beim Beenden einer Datei in Vim wurde behoben. Obwohl ich nicht sicher bin, ob dies die beste Lösung ist? Es ist sinnvoll, warum die Warnung gestoppt wurde, da .viminfo zuvor rw ------ war und ich davon ausgehe, dass mit vim-befehlshistorien darauf geschrieben wird.

David Tahvildaran
quelle
0

Ich mein Szenario, es war das Fehlen einer /root/.viminfoDatei insgesamt. Nachdem ich die Datei berührt hatte, wurde der Fehler beendet und die Datei beim Beenden von vim aktualisiert. PS: Dies ist Windriver Embedded Linux.

Naveen Gara
quelle