NeoVim удалил мой undo-файл, и я навсегда перестал им пользоваться

"They had no concept of a duty of care to their users."

NeoVim удалил мой undo-файл, и я навсегда перестал им пользоваться

Компьютерный учёный David Chisnall рассказал, как NeoVim при первом запуске обнаружил undo-файл vim, удалил его вместе со всей историей правок и заменил своим форматом, который vim не читает. На его жалобу ответили, что формат persistent undo нестабилен и пользователям не стоит рассчитывать на сохранность данных. Для него это стало нарушением первого закона Раскина: программа не должна вредить данным пользователя.

Ломать persistent undo я мог бы простить как баг, но отношение, будто то, что это постоянный файл в вашей файловой системе с данными, которые вам могут понадобиться, не причина для их программы не удалять его, означало, что у них нет никакого понятия об обязанности заботиться о своих пользователях.
  1. jeremyjh

    В этой истории нет ссылок, подтверждающих версию событий автора, но, по-видимому, во многом верно следующее:

    1. Это изменение сломало бы историю отмен, как для Neovim, так и для Vim [см. правку: на самом деле это не так]

    2. Это означает, что Neovim удалил бы данные, созданные другой программой, на компьютере другого пользователя.

    3. Об этом было известно до выпуска функции.

    4. Они всё равно это сделали.

    Не думаю, что тут вообще может быть какое-то постфактум-оправдание.

    https://github.com/neovim/neovim/pull/13973#issuecomment-789...

    правка: я упустил важную деталь. Пользователь указал один и тот же путь для undodir и в nvim, и в vim. Vim требует указать путь, чтобы включить эту функцию — общего пути по умолчанию нет. То, что пользователь использовал общий путь, значительно меняет картину, на мой взгляд, потому что теперь это случай, когда nvim удаляет данные, созданные nvim, вместо того чтобы написать для них миграцию данных.

    Я всё ещё мог бы с этим не согласиться, но это как минимум усложняет такие альтернативы, как «просто используйте другой путь», и полностью меняет моё восприятие этой ситуации. Я считаю, что решения Neovim оправданы в этом контексте. Возможно, они могли бы сохранить содержимое старой папки undo где-нибудь и уведомить пользователя — возможно, это было бы более чутко. Я не совсем согласен, что у них был моральный долг так поступить.

  2. gavinhoward

    Как пользователь Neovim, я замер от болезненного осознания: возможно, я пострадал от того же самого, но не понял этого. Был момент, когда я не смог что-то отменить, и это было после обновления Neovim.

    В отличие от доктора Чисналла, я начал свой путь в редакторах с Neovim, так что меня укусил не переход. Однако, если формат файла постоянной отмены нестабилен, и Neovim просто удаляет его, когда не распознаёт предыдущий формат, то, мне кажется, вполне можно представить, что обновление после смены формата тоже удалит файл.

    Ох. Это заставляет меня задуматься о том, чтобы уйти с Neovim. Да, FOSS поставляется как есть, но если есть альтернатива...

  3. sdcfgy

    Я пользовался vim с тех пор, как он впервые появился в репозиториях Debian. Мне тысячу раз говорили, что NeoVim лучше, современнее и решает множество проблем (которые удобно никогда не называют). Я просто игнорировал это и продолжал. Сейчас чувствую себя ужасно оправданным, поскольку это функция, которую я регулярно использую и понятия не имел, что в NeoVim с ней могут быть проблемы.

  4. BarbaryCoast

    Согласно истории версий VIM, постоянная отмена появилась в версии 7.3, выпущенной в 2010 году. Так что Чисналл, возможно, и пользовался ей с 2000 года, но у него не было постоянной отмены как минимум для двух из написанных им книг. И это значит, что она не «поддерживалась почти 20 лет», а в лучшем случае 16.

    Но это приятная функция.

    Я делаю это с помощью контроля версий. У меня он подключён к редактору так, что «сохранить» — это «закоммитить». Теперь у меня есть постоянные, версионированные копии всех моих состояний, независимо от того, какими инструментами я пользуюсь.

  5. gchamonlive

    Я что-то упускаю? Люди используют постоянную отмену как резервную копию?

    Однако это больше похоже на проблему документации и UX. Neovim должен предупреждать и спрашивать перед удалением старых файлов отмены или хотя бы делать их резервные копии, но это не вина neovim, если люди не используют надёжные системы резервного копирования и версионирования. Полагаться на постоянную отмену для этого — в некотором роде нанесение вреда самому себе.

    Используйте подходящие инструменты для задачи. Утверждение, что у разработчиков neovim «не было понятия об обязанности заботиться о своих пользователях», действительно неуважительно. Lua API Neovim переполнен заботой, просто нужно пойти и посмотреть.

  6. justinmk

    «Потеря данных» в undofile Vim происходит потому, что Vim (VIM!) сбросит undofile, если внешний инструмент (git, nano) изменил файл, пока Vim не запущен.

    Давайте, попробуйте:

    # Внесите несколько правок, затем выйдите из vim (не забудьте выйти).

    vim --clean +'set undofile' foo.txt

    # Отредактируйте тот же файл не-vim'ом; сохраните изменения.

    nano foo.txt

    # Снова откройте файл и попробуйте «u». Затем напишите в bluesky об «обязанности заботиться» Vim.

    vim --clean +'set undofile' foo.txt

    Это задокументировано в `:help undo-persistence`.

  7. natbennett

    Я тоже был очень ранним пользователем Neovim.

    Как я лично помню, его позиционировали как «Vim, но с ломающими изменениями».

  8. dlisboa

    > отношение, что просто потому, что что-то является постоянным файлом в вашей файловой системе, содержащим данные, которые вам могут понадобиться, это не причина для их программы не удалять его, означало, что у них не было понятия об обязанности заботиться о своих пользователях.

    Это неправильный взгляд. У NeoVIM другое понятие заботы о своих пользователях. Они оптимизируют другой вид заботы, более соответствующий современным ожиданиям, о котором VIM не заботился (отсюда и форк).

    Это не лучше и не хуже, просто по-другому.

    Эту же статью можно было бы написать о том, как у VIM нет встроенной интеграции с LSP или автодополнения, и у них нет обязанности заботиться о своих пользователях.

  9. ghtbircshotbe

    Neovim рекламируется как замена vim с возможностью подключения плагинов, что на 100% неверно. Многие вещи отличаются, включая файлы отмены и :!. Я не могу вспомнить функцию, из-за которой сдался, но в какой-то момент переключение стало отнимать больше сил, чем стоило, учитывая, что моя конфигурация vim уже работает. Не уверен, что делал бы, если бы начинал сегодня.

  10. RVuRnvbM2e

    Файлы отмены и постоянная отмена не предназначены для такого использования. Они просто сохраняются между перезапусками процесса. Вот и всё.

    Они лежат в ~/.cache, который определён как «пользовательские несущественные (кэшированные) данные».

    Несмотря на впечатляющее резюме этого пользователя, он просто неправильно понял функцию.

Ещё за этот день

2026-09-27