Помилка Vim E138: Неможливо записати файл viminfo $ HOME / .viminfo!


20

Боюся, я натрапив на щось досить дивне. Коли я нормально відкриваю файл vim README.txt, все добре. Але після sudo vim README.txtцього файл видається порожнім і видає E138: Can't write viminfo file $HOME/.viminfo!помилку при спробі виходу.

Я підозрював, що .viminfoфайл пошкоджений, тому я його видалив. Ця проблема залишається. Хтось може допомогти?


Чи можете ви публікувати результат під час запуску ls .viminf*?
cuonglm

Які дозволи на файл viminfo? Який вихід ls -la .vininf*?
darnir

Відповіді:


29

Після запуску sudo vimви запускаєте vim як root. Це означає, що саме проблема viminfo у / root є проблемою. Ви повинні робити rm /root/.viminf*.

Щоб переконатися в цьому, запустіть sudo vimі виконати наступну команду: :!echo $HOME. Це покаже вам, що ваш домашній каталог є / root.

Я рекомендую вам не запускати vim як root, а скоріше використовувати sudoedit. Це більш безпечне рішення, оскільки редактор не працює як root. Ви ніколи не знаєте, що може робити плагін. Крім того, це дозволяє використовувати власні налаштування та плагіни в vim, а не ті, що в коренях vimrc. sudoeditте саме, що бігати sudo -e. sudoedit працює, створюючи тимчасову копію файлу, який належить користувачеві, що викликає (ви). Після завершення редагування зміни записуються у фактичний файл, а тимчасовий файл видаляється.

Як загальне правило: Не запускайте речі як корінь, якщо це не потрібно.


Я думаю, ти, можливо, врятував мене від безлічі турбот із заміткою: "Це більш безпечне рішення, оскільки редактор не працює як root. Ніколи не знаєш, що може зробити плагін ". Я вважав, що я все про це подумав вразливості, але я помилився.
bballdave025

14

Я отримував цю помилку при кожному виході. Я не користувався sudo. Він чітко згадував мій домашній каталог користувача:

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

Видалення ~/.viminfoпомилки не виправлено.

Виявляється, у мене було безліч темп-файлів viminfo, і видалення цих виправлених проблем:

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

Знайшли це рішення тут .


5

Я отримав таку ж помилку при спробі :wqфайлу на диску, який був повністю заповнений. Якщо ви отримаєте це повідомлення, можливо, захочете перевірити доступний простір на диску.


3

Набагато більш чистим способом створення домашнього каталогу буде використання скелета, який, наприклад, надає Linux.

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

1
Боюся, питання має дуже мало спільного зі створенням домашніх каталогів ...
Джон У. Сміт

Вам потрібно створити домашній каталог для того, щоб vim зміг зберегти у .viminfo файл, тому так застосована вищевказана команда.
Рік

1
Існує незліченна кількість причин, чому цей файл не існував, перш ніж дійти такого висновку. Відсутність домашнього каталогу, ймовірно, спричинить набагато більше проблем, ніж просто відсутній файл; з цієї причини я міг відповісти на будь-яке питання про "відсутніх файлів" із "створити свою домашню директорію". :)
Джон У. Сміт

1
+1 У моєму випадку ця помилка сталася саме тому, що я редагував файл як користувача, у якого не було домашньої каталоги.
Золтан

3

Для мене проблема полягала в тому, що я змінив свій домашній каталог на місце розташування всередині кріплення NFS. Чомусь це призвело до того, що власник каталогу був "ніхто". Додавання дозволу на запис для "інших" вирішило проблему, оскільки я, очевидно, не був власником файлу.

chmod o+w ~/.viminfo

1
Чи можете ви уточнити свою відповідь. Однолінійні відповіді не вважаються хорошими в SE
Ромео Нінов

2
Як не дивно, що додавання інших дозволів на запит допомогло вам. Можливо, ви не володіли власним файлом?
Jeff Schaller

Це працює для мене. Я думаю, що мій ".viminfo" був створений користувачем "root", і якщо користувач "ubuntu" намагається його змінити, йому потрібен дозвіл на запис. У двох словах, "-rw-r - r--" стає "-rw-r - rw-".
смарагдіу

0

Швидше за все, це відбувається тому, що в домашньому режимі не вистачає місця на диску і будь-яка нова операція vim не вдається записати у файл .viminfo.


3
Це здається трохи надуманим: у вас є докази на це?
Jasonwryan

Це одна з можливостей, так.
Ned64

0

У мене була та сама проблема, коли оновлювався вміст Makefile. Мені була потрібна локальна змінна і вирішили її назвати HOME, тому я ввійшов до рядка HOME=2.154. Це призводить до того, що vim-HOMEналаштування буде замінено на неіснуючий каталог. Не використовуйте HOMEзмінну для іншого використання.


1
Зверніть увагу, що HOMEце заздалегідь визначена змінна середовище, і повторне визначення, як правило, не є хорошою ідеєю.
Барун

0

Я думаю, це може стосуватися лише старих версій linux / vi, але я знайшов, що в домашній каталог кореня були тимчасові файли з назви файлів /root/.viminfa.tmp ... /root/.viminfz.tmp і що їх було 26 із часовими позначками на кілька років. У нас закінчилися букви алфавіту, оскільки всі ази були взяті. Я видалив усі ці файли, і проблема зникла. Звичайно, Генрік вирішив # rm -rf ~/.viminf* би цю проблему чудово.


0

Схоже, ви очистили змінні середовища.

Зробити це:

експортувати HOME = / root

Це має вирішити вашу проблему.


0

Не впевнений, як я сам натрапив на цей сценарій, оскільки не пам'ятаю відкриття файлів за допомогою, sudo vimале в кожному :qз файлів я отримував аналогічне "Не можу писати viminfo не можна записати".

rm ~/.viminfoне вирішив це і ~/.vim/порожній.

chmod 666 ~/.viminfoвирішив це попереджувальне повідомлення під час виходу з файлу у Vim. Хоча я не впевнений, це найкраще рішення? Це має сенс, чому він зупинив попередження, оскільки .viminfo був rw ------ раніше, і я припускаю, що це записується з історіями команд vim.


0

За моїм сценарієм, це взагалі була відсутність /root/.viminfoфайлу. Після того, як я торкнувся файлу, помилка зупинилася, і файл було оновлено після виходу з програми vim. PS: Це Linux-вбудований Linux.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.