Рекомендации по использованию файла подкачки VIM?

14

Каждый раз, когда я прекращаю сеанс в vim, теряя связь, я полон dred (и все же я продолжаю использовать vim ... каким я должен быть мазохистом), потому что когда я снова открываю свои файлы, куча свопов файлы ждут, чтобы попытаться уничтожить мою работу. Каковы лучшие практики для работы с файлами подкачки vim? Вы просто выбираете самый новый? Если файл работает так, как вы ожидаете, вы просто удаляете файлы подкачки? Как вы от них избавляетесь?

leeand00
источник
5
Файлы подкачки существуют для защиты вашей работы. Рассмотрите возможность использования экрана GNU.
1
Я не хочу отключать функциональность; это раздражает, но, как вы говорите, полезно.
leeand00
1
Я просто хочу знать, как правильно его использовать.
leeand00
2
@DrEval Я использую tmux
leeand00
2
Если вы используете tmux, вам не нужно беспокоиться о потере соединения: просто подключитесь к сеансу при повторном подключении. Вы также можете быть заинтересованы в mosh и плагине @ ChristianBrabandt's Recover .
Богатое

Ответы:

22

Не паникуйте!

Восстановление файлов всегда безопасно, потому что vim никогда не записывает никаких изменений, пока вы сами их не напишите. Поэтому восстановление из файла подкачки и последующее закрытие без сохранения ничего не изменит.

Организуйте свои файлы подкачки:

Получите vim, чтобы поместить все ваши файлы подкачки в одно и то же место, чтобы вы всегда знали, где они находятся:

set directory^=$HOME/.vim/swap//

или где вы предпочитаете. Использование //в конце имени файла заставляет vim использовать абсолютные пути к файлам для имен файлов подкачки, чтобы избежать конфликтов имен. Убедитесь, что каталог существует, или vim не будет его использовать (он не создаст его для вас).

Примечание: это работает только с переменными окружения, если вы хотите использовать переменную vimscript, тогда нам нужно использовать :executeмагию:

execute "set directory^=".my_vim_home_var."/swap//"

Различаются различия:

Помощь Vim предполагает очень полезную команду для использования в этой ситуации: :DiffOrig. Это не команда vim по умолчанию , поэтому скопируйте ее реализацию :h :DiffOrigв ваш vimrc. (это также, $VIMRUNTIME/defaults.vimесли у вас есть Vim8). Теперь вы можете восстановить файл и просто запустить DiffOrig, чтобы получить vimdiff того, что изменилось по сравнению с неизмененной версией.

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

Полезные команды:

:swapname: получить имя, которое vim использует для файла подкачки для текущего буфера ( :h :swapname) :recover: восстанавливает выбранный файл так же, как при запуске vim и нажатии R( :h :recover)

Проверьте помощь:

Vim имеет целый раздел инструкции по восстановлению: :usr_11.txt
ссылочный помощи Vim на файлы подкачки: :h swap-file, h recovery
справки по опции каталога (для установки местоположения файла подкачки)::h 'directory'

Редактировать: модифицированный пример для установки каталога, как указано в комментариях @B Layer

flemingfleming
источник
Как насчет того, когда вы получите несколько файлов подкачки? Из-за многих много разорванных соединений?
leeand00
1
Я упоминал об этом во втором абзаце «Различия». Как только вы использовали diff, чтобы определить, какие изменения вы хотите сохранить, удалите все временные файлы и старые файлы подкачки, которые вы сделали (теперь вы знаете, где находятся все файлы подкачки).
Флеминг Флеминг
1
К вашему сведению, вам не нужно использовать exec... set directory^=$HOME/.vim/swap//работает нормально, если $HOMEявляется инициализированной переменной среды. См :h expand-env. Также работает с dictionary, undodirи, backupdirчтобы назвать несколько.
Слой
Спасибо, что напомнили мне об этом! Вместо этого я использую переменную vimscript в своей конфигурации, поэтому переменные среды execute и забыли не нуждаются в этом. Подумав об этом, я, вероятно, должен просто использовать vim для установки переменной окружения.
Флеминг Флеминг
2

Лично я отключил файлы подкачки и резервных копий, так как он имеет тенденцию создавать файлы подкачки и файлы резервных копий везде и часто создает конфликты. Постоянная отмена Vim стала намного более надежной и безошибочной.

В настоящее время Vim имеет постоянную отмену, это гораздо более точный метод резервного копирования. Каждый раз, когда вы нажимаете Esc, текущее состояние файла фиксируется.

Вы можете использовать :undolistили плагины, такие как Gundo , или отменить дерево, чтобы просмотреть историю отмен.

Чтобы использовать vim таким образом:

  • создайте каталог, в который вы будете записывать историю редактирования для каждого файла
  • скажи vim использовать этот каталог
  • включить постоянную отмену

В оболочке:

mkdir ~/.vim/undodir

В Vim

set undodir=~/.vim/undodir
set undofile

Чтобы отключить файлы подкачки: :set noswapfile

alpha_989
источник
1
Есть несколько довольно больших проблем с этим ответом. 1. Постоянная отмена решает другую проблему для замены файлов (и 'writebackup'решает еще одну проблему). Включение постоянной отмены не поможет в случае сбоя компьютера. Вы можете утверждать, что файлы подкачки не нужны по другим причинам (стабильность современных ОС, наличие ИБП), но вы не сделали этого в этом ответе. 2. настройка 'undodir' не включает постоянную отмену! Вы должны установить 'undofile'для этого
Рич