Vim: Дилемма swap и backup файлов

Источник: «Vim Swap and Backup Files Dilemma»
Рано или поздно вы заметите, что когда редактируете файлы, Vim создаёт файлы с именами вроде .filename.swp в том же месте, что и редактируемый файл. Эти файлы называются файлами подкачки.

Swap файлы

Swap файлы сохраняют изменения, которые вы внеси в буфер. В случае сбоя Vim, swap файл позволит восстановить эти изменения. Другая важная роль swap файлов — действовать как механизм блокировки: если открываете файл, который уже открыт в другом сеансе Vim, вы будете предупреждены. Это может быть полезно, особенно в многопользовательской системе.

Отключение swap файлов

Вы можете полностью отключить swap файлы, добавив set noswapfile в файл конфигурации vim .vimrc. Однако я бы рекомендовал не отключать их. Вместо этого вы могли бы лучше организовать swap файлы.

Организация swap файлов

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

Сначала создайте каталог для хранения swap файлов, например:

mkdir ~/.vim/swap

Затем поместите этот фрагмент в свой .vimrc:

set directory=$HOME/.vim/swp//

Параметр directory содержит список каталогов, в которых Vim попытается сохранить swap файлы. // в в конце указывает Vim использовать абсолютный путь к файлу для создания swap файла. Это гарантирует, что имя swap файла будет уникальным, поэтому не будет конфликтов имён между файлов с одинаковыми именами из разных каталогов.

Backup файлы

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

Конечно, эта функция может быть полезна. Резервные копии управляются настройкой двух опций: backup и writebackup. Если интересно, поищите их в :help.

Как и в случае с файлами подкачки, вы также можете лучше организовать резервные копии файлов, создав каталог и добавив его в свой .vimrc:

set backupdir=~/.vim/.backup//

Post Scriptum

Небольшое дополнение к статье. Следует отметить, что swap файлы ни в коем случае не могут заменить резервные копии. Редактор создаёт swap файл когда начинается редактирование файла, а после сохранения и закрытия буфера/выхода из редактора удаляет.

Файлы резервных копий создаются при начале редактирования файла и не удаляются после завершения редактирования. Соответственно, каждый раз, когда вы редактируете файл создаётся его новая резервная копия. С одной стороны это занимает лишнее место, но не так много. С другой стороны вы всегда можете восстановить предыдущую версию файла. Поэтому я всегда включаю опцию создания резервной копии. Легко организовать очистку резервных копий, например, раз в месяц. Написать сценарий удаляющий файлы старше текущей даты на месяц, но не трогающий файлы имена которых входят в список важных файлов.

В Windows файлы в следующем формате:

d%%work%github%laravel-crud-example%.env-20230330-204517.vimbackup
d%%work%github%laravel-crud-example%.gitignore-20230330-212731.vimbackup
d%%work%github%laravel-crud-example%app%Http%Controllers%PostController.php-20230330-213052.vimbackup
d%%work%github%laravel-crud-example%app%Models%Post.php-20230330-212928.vimbackup
d%%work%github%laravel-crud-example%database%migrations%2023_03_30_140626_create_posts_table.php-20230330-210759.vimbackup
d%%work%github%laravel-crud-example%routes%web.php-20230330-213325.vimbackup

В Linux (у меня настроено без сохранения пути файла):

.bashrc-20230223-152347.vimbackup
.bashrc-20230303-202640.vimbackup
.bashrc-20230322-150248.vimbackup
.bashrc-20230413-114805.vimbackup
catppuccin.lua-20230301-124033.vimbackup
colorscheme.lua-20230301-124004.vimbackup
config-20230413-120357.vimbackup
.gitconfig-20230218-181521.vimbackup
.gitignore-20230328-133012.vimbackup

С сохранением пути файлы хранятся в таком формате:

%home%user%.vimrc-20230512-103840.vimbackup

Мой репозиторий с .vimrc для Linux и _vimrc для Windows.

Мой репозиторий с конфигурацией для NeoVim.

Дополнительные материалы

Предыдущая Статья

Слепая SQL-инъекция

Следующая Статья

XSS: Внедрение висячей разметки