Вимкнення створення файлів підкачки у vim


216

Чи є спосіб відключити .swpстворення файлів у vim? або принаймні створити їх в одному місці, щоб я міг їх легко знайти та видалити.

Мені це особливо дратує, коли я одночасно копіюю батьківський каталог під час редагування. Звичайно, я знаю, що я можу використовувати find -exec, щоб знайти та видалити їх. Але я хочу більш практичного рішення.


1
stackoverflow.com/questions/607435/… може допомогти
Росс

Відповіді:


255

Щоб вимкнути заміну файлів у межах vim, введіть

:set noswapfile

Щоб назавжди відключити файли підкачки, додайте нижче до свого ~/.vimrcфайлу

set noswapfile

Докладніше див. Документи Vim у swapfile


6
Файли обміну добре, якщо редактор виходить з ладу (відключення живлення тощо), просто пам’ятайте.
koonse

1
Ще одним варіантом є використання файлу swap, але залиште його в пам'яті, щоб він не продовжував писати на жорсткий диск. Це не може захистити вас від втрати файлу під час відключення, але якщо ви відкриєте той самий файл у anther vim, він вам негайно повідомить. Команда така: встановити каталог = / dev / shm
webbertiger

відповідь trusktr дозволяє зберегти переваги своп-файлів, одночасно вирішуючи проблеми ОП.
jpaugh

Зсередини vim ви також можете відключити swapfile під час відкриття файлу::noswapfile edit /path/to/file
Torkel Bjørnson-Langen

Моя особиста філософія щодо втрати даних - це DBAB і економити часто ...
Samy Bencherif

156

Встановіть такі змінні в .vimrc або / etc / vimrc, щоб змусити vim поставити файли swap, резервного копіювання та скасування в спеціальне місце замість робочого каталогу редагованого файлу:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

Використання подвійних прорізних косої риски в шляху повідомляє vim увімкнути функцію, де вона уникає зіткнень з іменами. Наприклад, якщо ви редагуєте файл в одному місці, а інший - в іншому місці, і обидва файли мають одне ім’я, ви не хочете, щоб зіткнення з іменем відбувалося в ~ / .vim / swap /. Якщо ви вкажете ~ / .vim / swap // з двома кінцевими косою косою рисою, vim створить файли підкачки, використовуючи весь шлях редагуваних файлів, щоб уникнути зіткнень (косої лінії в шляху файлу буде замінено на відсоток символ%).

Наприклад, якщо ви редагуєте /path/one/foobar.txt та /path/two/foobar.txt, ви побачите два файли підкачки у ~ / .vim / swap /, які мають ім'я% path% one% foobar.txt і% path% два% foobar.txt відповідно.


Ви також можете додати, що певний час збережені файли резервного копіювання можуть врятувати шкіру розробників
Bartek Skwira

Коментар: (не критика). Це здається гарним, головним чином, для розвитку, оскільки для читання файлів та невеликих редагувань чи неважливого зберігання записів, що є значною частиною використання vim для багатьох людей, схоже, що зайву роботу з підписки краще залишити. Я особисто вважаю за краще, щоб на всіх роботах не було жодних свопів або інших автоматичних резервних копій. Якщо мені справді потрібно щось розробити, я б краще створив більш високий рівень захисту для мене, бажано, з контролем версій коду тощо.
j riv

@LelaDax Щоправда, більшість випадків ці файли здебільшого марні, оскільки я використовую git для всього свого вихідного коду. У рідкісних випадках (на зразок аварії) вони стали корисними. Але насправді історію скасування я дуже використовую. Набагато простіше орієнтуватися в цьому швидко, ніж перевіряти git, щоб переглянути попередню історію. gundo дозволяє приємно та легко орієнтуватися по дереву скасування. Я міг би жити без файлів підкачки та резервного копіювання.
trusktr

26
Просто FYI для нових людей (як я, ха-ха ...), вам доведеться зайти до ~ / .vim / і зробити каталоги самостійно. Він не створить їх автоматично для вас.
серпня

1
Ви також можете написати якийсь код у своєму vimrc, щоб автоматично створити папки для вас, що я і зробив у своїй. Отже, у нових системах я просто отримую свій vimrc, і він піклується про інше.
trusktr

42

Я знайшов відповідь тут :

vim -n <file>

відкриває файл без swapfile.

В додаток:

set dir=/tmp

в .vimrcстворює свопфайли в /tmp.


Що з *.ext~файлами резервного копіювання? Чи є варіант командного рядка також відключити їх?
Салман фон Абас

Це дуже корисно для тих разових величезних файлів! Дякую.
Феліпе Альварес

28

ось мої особисті налаштування резервного копіювання ~ / .vimrc

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup

13

Я погоджуюся з тими, хто сумнівається, чому vim потрібен весь цей матеріал для відновлення після аварій, коли жодні інші текстові редактори цим не заважають. Я не хочу, щоб vim створював будь-які зайві файли в каталозі відредагованого файлу, коли я його редагую, дуже дякую. З цією метою я маю це в своєму режимі, _vimrcщоб відключити файли підкачки та перемістити дратуючі файли "резервного копіювання" до режиму "Темп":

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile

9
Я думаю, що той факт, що інші редактори не турбуються цим, погано відбивається на інших редакторах, ніж це погано відображається на vi (m). Вибір зробити той самий каталог за замовчуванням місцем для розміщення цих файлів є трохи невдалим, хоча принаймні обмеженим. (наприклад, у мультисеверному, високо перехрещеному середовищі може не бути очевидним, де знайти файл відновлення в той момент, коли він вам найневідкладніше потрібен)
Домінго Ігнасіо

3
Обробка файлів своп-файлів Vim просто жахлива. Я використовував це для відновлення втрачених даних, можливо, 5 разів. Але мені довелося відновити swapfile приблизно в 9000 разів, який завжди є ідентичним файлу, або ще гірше застаріла версія. Це може бути гарною особливістю, якщо процес відновлення не смокче так страшно. recovery.vim трохи допомагає, але все ще занадто інтерактивний.
joeytwiddle

3
Піднесений текст має disaster recovery. Я це люблю! Мені навіть не потрібно зберігати файл, коли я відновляю зміни, внесені, збережені чи ні, витягуються назад.
leetNightshade

У мене є простий автокоманд, який записує всі зміни, як тільки вони зроблені, роблячи і свопфайли, і резервні копії марними.
tbodt

2
@ TorkelBjørnson-Langen Це, мабуть, моя вина за перезавантаження моєї машини, не закриваючи всі мої сеанси Vim, а потім є параноїком щодо того, які файли відновлення дійсно дійсні. У будь-якому разі я намагався досягти найкращого з обох світів, написавши плагін, який підтримує свопфайл лише тоді, коли є незбережені редагування: vim-swap-is-awesome.vim
joeytwiddle

7

Ви можете встановити backupdir і каталог на нуль, щоб повністю вимкнути свої файли swap, але, як правило, рекомендується просто помістити їх у централізований каталог. Vim піклується про те, щоб не було колізійних назв чи чогось подібного; Отже, це абсолютно безпечна альтернатива:

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

3
Ви повинні додати подвійну косу рису //в кінці шляхів, щоб ви могли одночасно змінювати два файли з тим самим іменем.
Самуель О'Маллей

Дякую, @ SamuelO'Malley Що // робить?
монокром

Погляньте, :help directoryчи хочете ви прочитати документи для цього. Подвійний косий ривок вказує vim кодувати повний шлях до імені файла swap, наприклад %home%sam%dotfiles%.gitignore.swp, а не просто .gitignore.swp.
Samuel O'Malley

3

Якщо ви помістите set directory=""файл exrc, ви вимкнете файл swap. Однак це дозволить відновити відновлення.

Більше інформації тут .


3

Якщо ви використовуєте git, ви можете додати *.swpдо .gitignore.


Я думаю, що саме це потребує найбільше користувачів! Відключення файлів swap - це погана практика.
Денис Колодін

2

не створюйте файлу swap vim лише для певного файлу

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile

1
Або для всіх файлів у певному каталозі, здається, працює наступне (лише коротке тестування):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty

1

Для тих, хто намагається встановити це для проектів Rails, додайте

set directory=tmp,/tmp

у свій

~/.vimrc

Отже, .swp файли будуть знаходитись у своєму природному місці - директорії tmp (за проектом).

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