Почему Vim сохраняет файлы с расширением ~?


180

Я обнаружил, что при использовании Vim в Windows Vim сохраняет файл, .ext.swpфайл, который удаляется при закрытии окна Vim, и .ext~файл.

Я предполагаю, что .ext.swpфайл является резервной копией сеанса на случай сбоя Vim. Какова цель .ext~файла, однако? Это постоянный резервный файл? Это раздражает, так как я хотел бы скопировать все файлы, над которыми я работаю, на мой хост без этих дубликатов. Как я могу отключить это или , если оно есть по уважительной причине, скрыть файлы ?


У вас есть файлы, открытые одновременно в более чем одном месте, они создадут .ext.swp.
Dirkgently

2
dirkgently: нет, здесь я могу открыть файл в единственном окне vim, и он создаст файл .swp. Я не слишком беспокоюсь об этом, поскольку он удаляется, когда я сохраняю / закрываю окно.
Росс

Ответы:


221

*.ext~Файл представляет собой файл резервной копии, содержащий файл , как это было прежде , чем вы редактировали.

Этот *.ext.swpфайл является файлом подкачки, который служит файлом блокировки и содержит историю отмен / повторов, а также любую другую внутреннюю информацию, необходимую Vim. В случае сбоя вы можете заново открыть ваш файл, и Vim восстановит его предыдущее состояние из файла подкачки (что я считаю полезным, поэтому я не выключаю его).

Чтобы отключить автоматическое создание файлов резервных копий, используйте (в вашем vimrc):

set nobackup
set nowritebackup

Где nowritebackupизменяется поведение Vim по умолчанию при сохранении, а именно:

  1. записать буфер в новый файл
  2. удалить оригинальный файл
  3. переименовать новый файл

и заставляет Vim записывать буфер в исходный файл (что приводит к риску его уничтожения в случае ошибки ввода-вывода). Но вы препятствуете «скачкам файлов» на рабочем столе Windows с ним, что является основной причиной для меня на nowritebackupместе.


7
+1 За you prevent "jumping files" on the Windows desktop. Погуглил и нашел этот ответ
Мерлин Морган-Грэм

1
На самом деле - я должен иметь и то, nobackupи другое nowritebackup? Есть ли способ записать копию файла в качестве резервной копии, но не делать это писать / удалять / переименовывать вещи?
Мерлин Морган-Грэм

@Merlyn: Если у вас есть backup(в отличие от nobackup), то Vim создаст резервную копию ( *.ext~файл). Это совершенно не связано с nowritebackup.
Томалак

6
Существует таблица , описывающая различное поведение между комбинацией этих переключателей: help backup-table. Оказывается, настройка ни, nobackupни nowritebackup, но вместо этого настройка backupcopy=yesтакже решает проблему «прыжков». Это может повредить перфекту, хотя, так что каждому свое
Мерлин Морган-Грэм

27
Вместо того, чтобы выключить, set backupdir=~/.vim/backupсделайте резервную копию в каталог в .vimrc или _vimrc на окнах
tsukimi

224

Я думаю, что лучшее решение - поместить эти строки в ваш файл vimrc.

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

Первая строка для файлов резервных копий, вторая строка для файлов подкачки. Двойная косая черта в конце гарантирует отсутствие конфликта в случае двух файлов с одинаковым именем, см. Комментарии (на момент этого редактирования этот параметр учитывался только для файлов подкачки, но не для файлов резервных копий ). ,.Позволяют vimиспользовать текущий каталог , если первый не существует.

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

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


22
+1 У меня на самом деле установлено ~ / .vim / tmp, но в любом случае, это спасло мою задницу не раз.
JC Yamokoski

11
Зачем тебе, в конце каждой строки?
Шин

9
@shin Vim будет использовать первый доступный каталог, поэтому в этом случае, если ~ / vimtmp не существует, он будет использовать текущий рабочий каталог
xixixao

3
@SalmanPK В идеальном мире вы не должны редактировать файлы конфигурации непосредственно на общедоступных серверах
Score_Under

12
Используйте две косые черты в конце пути. Например, установите backupdir = ~ / .vim / .backup // - "//" в конце каталога означает, что имена файлов будут построены из полного пути к файлу со всеми разделителями пути, замененными на проценты "% " подписать. Это обеспечит уникальность имени файла в каталоге preserve.
Hacknightly

25

Чтобы отключить эти файлы, просто добавьте эти строки в .vimrc (файл конфигурации vim в ОС на основе Unix):

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files

12
:set nobackup 

отключит резервное копирование. Вы также можете установить backupdir, если вам все еще нужны эти файлы резервных копий, но в центральной папке. Таким образом, ваш рабочий каталог не будет завален файлами ~.

Вы найдете больше информации о резервных копиях в разделе : резервное копирование .


12

И вы также можете установить другое расширение для резервных копий и место для сохранения этих резервных копий (я предпочитаю ~/.vimbackupsв Linux). Раньше я использовал «версионные» резервные копии через:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

Это устанавливает расширение динамического резервного копирования ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).


3
Возможно, вы захотите указать, как настроить каталог резервного копирования, то есть добавить set backupdir=~/.vimbackupsсвой ~ / .vimrc
rampion

1
Помощь vim полностью описывает эту технику. Смотрите:help backupext
netjeff

8

Поместите эту строку в свой vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


В это было бы:

C:\Program Files (x86)\vim\_vimrc

файл для общесистемной конфигурации vim для всех пользователей.

Установка последнего noundofileважна в Windows, чтобы предотвратить создание *~файлов тильды после редактирования.


Я бы хотел, чтобы Vim включил эту строку по умолчанию. Никто не любит уродливые каталоги.

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

Это самая раздражающая часть Vim.

Следующим шагом может быть настройка:

set noeb vb t_vb= " errorbells visualbell

отключить звуковой сигнал в также :-)


Спасибо тебе большое за это! "noundofile" был вариантом, который наконец избавился от этого ужасного помета. (И я согласен на 100% со всем, что вы написали в своем посте!)
pwmusic

6

Вы правы, что .swpфайл используется vim для блокировки и как файл восстановления.

Попробуйте set nobackupвставить свой vimrc, если вы не хотите эти файлы. Посмотрите документы Vim для различных опций, связанных с резервным копированием, если вы хотите весь совок или хотите иметь вместо этого файлы .bak ...


+1 за упоминание цели как файла блокировки. Я не думал об этом.
Томалак

5

Единственный вариант, который работал для меня, это поместить эту строку в мой файл ~ / .vimrc.

установить noundofile

Другие параметры, относящиеся к файлам резервных копий, не препятствовали созданию временных файлов, оканчивающихся на ~ (тильда)


Это, наконец, сработало для меня. Почему это не упоминается в других ответах? Это удаляет: .<filename>.un~файлы, в то время как другие опции только удаляют <filename>~файлы.
JLT

0

Я должен был добавить set noundofileк ~ _gvimrc

Каталог «~» можно определить, изменив каталог с помощью cd ~команды

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.