Errore Vim E138: impossibile scrivere il file viminfo $ HOME / .viminfo!


20

Temo di aver incontrato qualcosa di piuttosto strano. Quando apro normalmente un file vim README.txt, va tutto bene. Ma dopo sudo vim README.txt, il file diventa vuoto e mi dà un E138: Can't write viminfo file $HOME/.viminfo!errore nel tentativo di uscire.

Sospettavo che il .viminfofile fosse corrotto, quindi l'ho eliminato. Questo problema rimane. Qualcuno può aiutare?


Puoi pubblicare il risultato quando corri ls .viminf*?
cuonglm,

Quali sono le autorizzazioni sul file viminfo? Qual è l'output di ls -la .vininf*?
Darnir,

Risposte:


29

Quando corri sudo vim, avvii vim come root. Ciò significa che il problema è il file viminfo in / root. Dovresti farlo rm /root/.viminf*.

Per assicurarsi di questo, eseguire sudo vimed eseguire questo comando: :!echo $HOME. Questo ti mostrerà che la tua home directory è / root.

Consiglierei di non eseguire vim come root, ma piuttosto di utilizzarlo sudoedit. Questa è una soluzione più sicura poiché l'editor non è in esecuzione come root. Non sai mai cosa potrebbe fare un plugin. Inoltre ti permette di usare le tue impostazioni e plugin in vim e non quelli in root vimrc. sudoeditè uguale a correre sudo -e. sudoedit funziona creando una copia temporanea del file di proprietà dell'utente che invoca (tu). Al termine della modifica, le modifiche vengono scritte nel file effettivo e il file temporaneo viene eliminato.

Come regola generale: non eseguire le cose come root se non è necessario.


Penso che potresti avermi salvato da un sacco di preoccupazioni con la nota, "Questa è una soluzione più sicura in quanto l'editor non è in esecuzione come root. Non sai mai cosa potrebbe fare un plugin. " Credevo di aver pensato a tutto vulnerabilità, ma mi sbagliavo.
bballdave025,

14

Ho ricevuto questo errore ad ogni uscita. Non ho usato sudo. Ha menzionato esplicitamente la mia home directory utente:

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

La rimozione ~/.viminfonon ha risolto l'errore.

Ho scoperto che avevo un sacco di file temporanei di viminfo, e la rimozione di quelli risolti il ​​problema:

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

Ho trovato questa soluzione qui .


5

Ho ricevuto lo stesso errore quando provavo a :wqun file su un disco che era completamente pieno. Se ricevi questo messaggio, potresti voler controllare lo spazio su disco disponibile.


3

Un modo molto più pulito di creare una home directory sarebbe usare lo scheletro che Linux ti fornisce per esempio.

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae

1
Temo che la domanda abbia ben poco a che fare con la creazione di home directory ...
John WH Smith,

È necessario creare una home directory affinché vim sia in grado di salvare nel file .viminfo, quindi sì, il comando sopra è applicabile.
Rick,

1
Ci sono innumerevoli motivi per cui questo file non esisterebbe, prima che tu possa giungere a tale conclusione. L'assenza di una home directory probabilmente causerebbe molti più problemi di un semplice file mancante; con questo motivo ho potuto rispondere praticamente a qualsiasi domanda "file mancante" con "crea la tua home directory". :)
John WH Smith,

1
+1 Nel mio caso, questo errore si è verificato esattamente perché stavo modificando un file come utente che non aveva una home directory.
Zoltán,

3

Per me il problema era che avevo cambiato la mia directory home in posizione all'interno di un mount NFS. Per qualche motivo, ciò ha comportato che il proprietario della directory non fosse "nessuno". L'aggiunta di autorizzazioni di scrittura per "altro" ha risolto il problema poiché chiaramente non ero il proprietario del file.

chmod o+w ~/.viminfo

1
Potete per favore chiarire la vostra risposta. Le risposte on-line non contano altrettanto bene in SE
Romeo Ninov il

2
Strano che l'aggiunta di altre autorizzazioni di scrittura ti abbia aiutato. Forse non possedevi il tuo file?
Jeff Schaller

Questo funziona per me. Immagino che il mio ".viminfo" sia stato creato dall'utente "root" e se l'utente "ubuntu" prova a modificarlo, ha bisogno di un permesso di scrittura. In breve, "-rw-r - r--" diventa "-rw-r - rw-".
emeraldhieu,

0

Molto probabilmente ciò accade perché la home directory ha esaurito lo spazio su disco e qualsiasi nuova operazione vim non è in grado di scrivere nel file .viminfo.


3
Sembra un po 'inverosimile: hai qualche prova per questo?
Jasonwryan,

Questa è una possibilità, sì.
Ned64,

0

Ho avuto lo stesso problema durante l'aggiornamento del contenuto di Makefile. Avevo bisogno di una variabile locale e ho deciso di nominarla HOME, quindi ho inserito la riga HOME=2.154. Questo fa sì che l' vim-HOMEimpostazione venga sostituita da una directory inesistente. Non utilizzare la HOMEvariabile per altri usi.


1
Si noti che HOMEè una variabile di ambiente predefinita e ridefinirla di solito non è una buona idea.
Barun,

0

Penso che questo possa applicarsi solo alle versioni piuttosto vecchie di linux / vi, ma quello che ho scoperto è che c'erano dei file temporanei nella home directory del root con i nomi di file /root/.viminfa.tmp ... /root/.viminfz.tmp e che erano 26 con timestamp che coprivano diversi anni. Avevamo finito le lettere dell'alfabeto mentre venivano presi tutti gli az. Ho rimosso tutti quei file e il problema è scomparso. Ovviamente Henrik # rm -rf ~/.viminf* risolverà bene questo problema.


0

Sembra che tu abbia cancellato le variabili di ambiente.

Fai questo:

export HOME = / root

Questo dovrebbe risolvere il tuo problema.


0

Non sono sicuro di come mi sia imbattuto in questo scenario da solo, poiché non ricordo di aver aperto alcun file utilizzando, sudo vimma su ciascuno :qdi questi file stavo ottenendo un analogo "Impossibile scrivere viminfo non è scrivibile".

rm ~/.viminfonon l'ha risolto ed ~/.vim/era vuoto.

chmod 666 ~/.viminforisolto quel messaggio di avviso all'uscita da un file in Vim. Anche se non sono sicuro che questa sia la soluzione migliore? Ha senso il motivo per cui ha fermato l'avvertimento poiché .viminfo era rw ------ prima e presumo che venga scritto con le storie dei comandi di vim.


0

Nel mio scenario, è stata l'assenza del /root/.viminfofile del tutto. Dopo aver toccato il file, l'errore si è interrotto e il file è stato aggiornato all'uscita da vim. PS: Questo è Linux embedded windriver.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.