Чому Vim зберігає файли з розширенням ~?


180

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

Я припускаю, що .ext.swpфайл являє собою резервну копію сеансу у випадку збоїв. Яка мета .ext~файлу, однак? Це файл постійної резервної копії? Це дратує, оскільки я хотів би копіювати всі файли, над якими працюю, на свій хост, без цих дублікатів. Як я можу це вимкнути або приховати файли , якщо він є з поважної причини ?


Якщо у вас є одночасно відкритий файл у більш ніж одному місці, вони створять .ext.swp.
мерзько

2
dirkgently: Ні, тут я можу відкрити файл у єдиному вікні vim, і він створить .swp файл. Я не надто метушився з цього приводу, що його видаляють, коли я зберігаю / закриваю вікно.
Росс

Відповіді:


221

*.ext~Файл представляє собою файл резервної копії, що містить файл , як це було раніше , ніж ви редагували.

*.ext.swpФайл є файлом підкачки, який служить в якості файлу блокування і містить історію скасування / повтору, а також будь-які інші внутрішні потреби Інформація Vim. У разі аварії ви можете знову відкрити свій файл, і Vim відновить його попередній стан із файлу swap (що я вважаю корисним, тому не вимикаю його).

Щоб вимкнути автоматичне створення резервних файлів, використовуйте (у своєму 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 на Windows
tsukimi

224

Я думаю, що кращим рішенням є розміщення цих рядків у вашому файлі vimrc

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

Перший рядок - для резервних файлів, другий рядок - для файлів підкачки. Подвійний проріз в кінці гарантує, що немає конфлікту у випадку, якщо два файли мають одне ім’я, дивіться коментарі (на час цієї редагування ця опція шанується лише для файлів підкачки, ще не для резервних файлів ). ,.Дозволяють vimвикористовувати поточний каталог , якщо перший не існує.

Для цього вам потрібно створити каталог у своєму домашньому каталозі під назвою vimtmp. Також перевірте, чи резервні копії увімкнено у вашому конфігурації (додайте, set backupякщо ні).

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


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

11
Навіщо вам це потрібно? в кінці кожного рядка?
шинь

9
@shin Vim використовуватиме перший доступний dir, тому в цьому випадку, якщо ~ / vimtmp не існує, він буде використовувати поточну робочу директорію
xixixao

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

12
Скористайтеся двома косою рисою в кінці шляху. Наприклад, встановити backupdir = ~ / .vim / .backup // - "//" в кінці каталогу означає, що імена файлів будуть побудовані з повного шляху до файлу, а всі роздільники шляху заміщені на відсотки "% "знак". Це забезпечить унікальність імені файлу в каталозі збереження.
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 

вимкне резервні копії. Ви також можете встановити резервну копію, якщо ви все ще хочете цих файлів резервної копії, але в центральній папці. Таким чином ваш робочий dir не заповнений ~ файлами.

Додаткову інформацію про резервні копії ви можете знайти в розділі : він резервного копіювання .


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, щоб запобігти створенню *~файлів тильди після редагування.


Я б хотів, щоб у Віма за замовчуванням був цей рядок. Ніхто не любить потворних каталогів.

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

Це найприємніша частина Віма.

Наступним кроком може бути налаштування:

set noeb vb t_vb= " errorbells visualbell

вимкнути звуковий сигнал у також :-)


Дуже дякую за це! "нундофіл" був варіантом, який нарешті позбувся цього бого жахливого сміття. (І я згоден на 100% з усім іншим, що ви написали у своєму дописі!)
pwmusic

6

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

Спробуйте ввести set nobackupсвій vimrc, якщо ви не хочете цих файлів. Дивіться документи Vim щодо різних варіантів, пов’язаних із резервним копією, якщо ви хочете, щоб цілий совок, або ви хочете мати .bak файли натомість ...


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

5

Єдиний варіант, який працював для мене, - це ввести цей рядок у мій файл ~ / .vimrc

встановити noundofile

Інші параметри, що стосуються файлів резервного копіювання, не заважали створювати тимчасові файли, що закінчуються на ~ (tilde)


Це нарешті спрацювало для мене. Чому це не згадується в інших відповідях? Це видаляє: .<filename>.un~файли, тоді як інші параметри видаляють лише <filename>~файли.
JLT

0

Мені довелося додати set noundofileдо ~ _gvimrc

Каталог "~" можна ідентифікувати, змінивши каталог за допомогою cd ~команди

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.