Obawiam się, że wpadłem na coś raczej dziwnego. Kiedy otwieram plik normalnie vim README.txt
, wszystko jest w porządku. Ale sudo vim README.txt
plik staje się pusty i E138: Can't write viminfo file $HOME/.viminfo!
wyświetla komunikat o błędzie przy próbie wyjścia.
Podejrzewałem, że .viminfo
plik jest uszkodzony, więc go usunąłem. Ten problem pozostaje. Czy ktoś może pomóc?
permissions
vim
sudo
root
James Adam Buckland
źródło
źródło
ls .viminf*
?ls -la .vininf*
?Odpowiedzi:
Po uruchomieniu
sudo vim
uruchamiasz vima jako root. Oznacza to, że problemem jest plik viminfo w katalogu / root. Powinieneś to zrobićrm /root/.viminf*
.Aby upewnić się co do tego, biegać
sudo vim
i wykonywać polecenia::!echo $HOME
. To pokaże, że twój katalog domowy to / root.Polecam, abyś nie uruchamiał vima jako root, ale raczej używał
sudoedit
. Jest to bezpieczniejsze rozwiązanie, ponieważ edytor nie działa jako root. Nigdy nie wiesz, co może zrobić wtyczka. Dodatkowo pozwala używać własnych ustawień i wtyczek w vimie, a nie tych w rootach vimrc.sudoedit
jest taki sam jak bieganiesudo -e
. sudoedit działa, tworząc tymczasową kopię pliku, który jest własnością wywołującego użytkownika (Ciebie). Po zakończeniu edycji zmiany są zapisywane w rzeczywistym pliku, a plik tymczasowy jest usuwany.Ogólna ogólna zasada: nie uruchamiaj rzeczy jako root, jeśli nie jest to konieczne.
źródło
Ten błąd pojawia się przy każdym wyjściu. Nie korzystałem
sudo
. Wyraźnie wspomniał o moim katalogu domowym użytkownika:Usunięcie
~/.viminfo
nie naprawiło błędu.Okazało się, że miałem kilka plików tymczasowych viminfo, a usunięcie ich rozwiązało problem:
Znalazłem to rozwiązanie tutaj .
źródło
Ten sam błąd wystąpił podczas próby
:wq
utworzenia pliku na dysku, który był całkowicie pełny. Jeśli otrzymasz ten komunikat, możesz sprawdzić dostępne miejsce na dysku.źródło
O wiele czystszym sposobem na utworzenie katalogu domowego byłoby na przykład użycie szkieletu, który zapewnia ci Linux.
źródło
Dla mnie problemem było to, że zmieniłem mój katalog domowy na lokalizację wewnątrz montowania NFS. Z jakiegoś powodu spowodowało to, że właścicielem katalogu był „nikt”. Dodanie uprawnień do zapisu dla „innych” rozwiązało problem, ponieważ wyraźnie nie byłem właścicielem pliku.
źródło
Najprawdopodobniej dzieje się tak, ponieważ w katalogu domowym zabrakło miejsca na dysku i żadna nowa operacja vima nie może zapisać w pliku .viminfo.
źródło
Miałem ten sam problem podczas aktualizacji zawartości Makefile. Potrzebowałem zmiennej lokalnej i postanowiłem ją nazwać
HOME
, więc wpisałem wierszHOME=2.154
. Powodujevim-HOME
to zastąpienie ustawienia nieistniejącym katalogiem. Nie używajHOME
zmiennej do innych celów.źródło
HOME
jest to predefiniowana zmienna środowiskowa, a jej ponowne zdefiniowanie zazwyczaj nie jest dobrym pomysłem.Myślę, że może to dotyczyć tylko dość starych wersji linux / vi, ale znalazłem, że w katalogu głównym katalogu głównego znajdują się pliki tymczasowe o nazwach plików /root/.viminfa.tmp ... /root/.viminfz.tmp i że było ich 26 z datownikami obejmującymi kilka lat. Skończyły nam się litery alfabetu, ponieważ wszystkie az zostały zabrane. Usunąłem wszystkie te pliki i problem zniknął. Oczywiście Henrik
# rm -rf ~/.viminf*
naprawiłby ten problem.źródło
Wygląda na to, że wyczyściłeś zmienne środowiskowe.
Zrób to:
eksportuj HOME = / root
To powinno rozwiązać problem.
źródło
Nie jestem pewien, jak osobiście spotkałem się z tym scenariuszem, ponieważ nie przypominam sobie otwierania żadnych plików,
sudo vim
ale na każdym:q
z nich otrzymywałem podobny komunikat „Nie można zapisać viminfo nie jest zapisywalny”.rm ~/.viminfo
nie rozwiązał tego i~/.vim/
był pusty.chmod 666 ~/.viminfo
rozwiązano ten komunikat ostrzegawczy podczas wychodzenia z pliku w Vimie. Chociaż nie jestem pewien, czy to najlepsze rozwiązanie? Ma sens, dlaczego zatrzymał to ostrzeżenie, ponieważ .viminfo był wcześniej rw ------ i zakładam, że zapisuje się w nim historie poleceń vim.źródło
W moim scenariuszu był to
/root/.viminfo
całkowity brak pliku. Po dotknięciu pliku błąd zatrzymał się i plik został zaktualizowany po wyjściu z vima. PS: To jest linux wbudowany w windriver.źródło