Vim: Что такое set hidden
Если вы когда-либо просматривали .vimrc
пользователя Vim (вот архив из нескольких из них для ознакомления), то, скорее всего, сталкивались с set hidden
. Этот параметр является неотъемлемой частью многих конфигураций Vim, поскольку конфигурация Vim по умолчанию поставляется с set nohidden
, что означает, что скрытие отключено.
Но что вообще делает set hidden
и зачем это нам нужно? Разве мы не должны доверять параметрам Vim по умолчанию? Прочитайте :help hidden
для официального разъяснения, но это немного бестолково. В двух словах, разрешая скрытые буферы с помощью set hidden
, вы сообщаете Vim, что у вас могут быть несохранённые работы, которые не отображаются на вашем экране.
Представьте, что вы открываете файл с помощью :e some.file
. Вы делаете некоторые изменения, но не записываете файл на диск с помощью :w
. Затем вы открываете другой файл с помощью :e some-other.file
. Если по умолчанию установлена опция :set nohidden
, Vim выдаст сообщение об ошибке:
E37: No write since last change (add ! to override)
Это способ Vim сообщить, что вы не можете открыть новый буфер (и скрыть этот), не записав его. Если вы хотите разрешить такое поведение, просто добавьте опцию set hidden
в ваш .vimrc
. Многим пользователям Vim нравиться гибкость, которую даёт set hidden
, позволяя быстро перемещаться по файлам, не беспокоясь о том, записаны ли они на диск. Это позволяет им преднамеренно решать, когда и где они записывают файлы. Без включённого hidden
вам может потребовать внести изменения, которые вы ещё не готовы записать, просто, чтобы увидеть другой файл. Если у вас включена синтаксическая проверка или какая-то фоновая компиляция ресурсов, которая происходит при записи, возможно, вам не всегда нужно, чтобы они срабатывали при перемещении файлов. С set hidden
у вас есть такая гибкость.
С другой стороны, некоторые пользователи предпочитают set nohidden
по умолчанию, потому что это означает, что они не могут потерять рабочие данные в скрытом буфере. Нет ничего хуже, чем чувствовать, что вы потеряли рабочие данные, когда готовите изменения для коммита. На самом деле вы внесли изменение, просто забыли записать буфер. С set nohidden
у вас есть некоторые ограждения, которые помогут вам предотвратить утерю несохранённых данных. Но без включённого hidden
вы не сможете запускать команды для нескольких файлов с помощью команды Vim argdo
, если только вы не сохраните эти файлы на том же шаге с | w
.
Так что вы предпочитаете?