Як запобігти створенню (та залишенню) тимчасових файлів vim?


163

Чому vim створює <filename>~файли? Чи є спосіб відключити це?

Якщо це для резервного копіювання (або щось таке), я використовую для цього git.

Також ці .<filename.with.path.hints>.swpфайли теж.

Як я можу сказати vim не створювати їх або принаймні прибирати після себе?

EDIT

дуп, дублікат:

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

Я прийняв відповідь rogeriopvl звідти.

Дослівна копія:

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

13
Git ніколи не допоможе відновити роботу після збоїв у системі. Git також може ігнорувати ваші * .swp файли. = D
vmassuchetto



чи не хтось серйозно позначив це питання як повторне після шести років після публікації?
hasen

Відповіді:


79

Я настійно рекомендую продовжувати працювати з файлами swap (у випадку, коли Vim виходить з ладу).

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

set swapfile
set dir=~/tmp

Дивитися також

:help swap-file

4
ну, мені ніколи не потрібні були ті, хто має блокнот ++, якщо тільки ви не скажете, що vim буде занадто часто виходити з ладу!
hasen

8
ні, я не мав на увазі, що vim виходить з ладу занадто часто (хоча я бачив, що він вийшов з ладу). Але для мого робочого середовища мережеве підключення до якогось хоста, над яким я працюю, є досить нестабільним, тому відбувається перерване редагування. Там допомагають поміняти файли.
користувач55400

9
@ user55400 чув про GNU / Screen? (або tmux, або ця японська альтернатива)
Елазар Лейбович

Я додав це до файлу _vimrc у Windows, і я все ще отримую файли ~ файли. Чи я щось не роблю правильно?
FilBot3

2
@noircc Я б радив не використовувати / tmp. Якщо вся система вийде з ладу і вам доведеться перезавантажити, ваші свопфіли не будуть.

57

Помістіть це у свій файл конфігурації .vimrc.

set nobackup

5
Ми це зробили в Windows 8.1 за допомогою Vim. Файли своп все ще присутні.
Shaun Luttin

1
Shaun, можливо, вам доведеться додати "set noswapfile" до вашого .vimrc, а також, щоб запобігти створенню нових файлів swap, як це було зазначено в редакції до початкового питання.
Граф Зедд

Як щодо :сидіння як префіксу перед setключовим словом? Це потрібно? Це не схоже на коментар ..
Стефан

@Stephane :префікс означає, що це зроблено в командному режимі, але вам не потрібно, :коли пишете свій vimrc
TankorSmash

Це насправді не дуже гарна ідея. Наведене вище про дозвіл цих файлів сидіти в темп / папці вже набагато краще.
Мсьє,

36

; Користувачі Windows повертаються до темп-каталогу

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup

6
Мені довелося додати набір undodir = C: \ WINDOWS \ Temp

Це не спрацювало для мене - мені довелося використовувати набір dir = $ TEMP замість
Френк Шмітт

10

Я зробив плагін під назвою "noswapsuck", який дозволяє включати свопфайл лише тоді, коли буфер містить незбережені зміни. Після збереження змін, файл swap очищається. Отже, свопі файли, які містять той самий вміст, що і файл на диску, будуть видалені.

Отримайте його тут: noswapsuck.vim

Це добре працює для мене, але я раніше цього не публікував, тому бажаю відгуків.

Переваги:

  • Єдиними свопфілами, які залишаються на вашому диску, будуть важливі свопфіли, які насправді відрізняються від файлу!

Недоліки:

  • Якщо в буфері є файл swap, він не буде виявлений при першому відкритті файлу. Він буде виявлений лише тоді, коли swapfileввімкнено функцію, коли ви починаєте редагувати буфер. Це прикро запізнюється і перебиватиме вас. (Вирішено. Тепер ми перевіряємо наявність наявного swapfile, коли буфер відкрито, тимчасово знову ввімкнувши цю swapfileопцію.)

  • Якщо ви працюєте в середовищі, де ви хочете звести до мінімуму записи на диск (наприклад, низька потужність, файли, встановлені через мережу, або редагування величезного файлу), тоді не ідеально тримати видалення та повторне створення файлу swap для кожного зберегти та відредагувати. У таких ситуаціях ви можете:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    який збереже swapfile після запису, але все одно видалить його, коли буфер втратить фокус.

До речі, у мене є ще один маленький плагін, :DiffAgainstFileOnDiskякий може бути дуже корисним після натискання (r)ecover, щоб перевірити, чи буфер, який ви відновили, є новішим чи старшим за існуючий файл, чи ідентичний йому.


8

У Windows додайте наступні рядки до _vimrc

" store backup, undo, and swap files in temp directory
set directory=$HOME/temp//
set backupdir=$HOME/temp//
set undodir=$HOME/temp//

5

Ця відповідь стосується використання gVim в Windows 10. Я не можу гарантувати однакові результати для інших операційних систем.

Додати:

set nobackup
set noswapfile
set noundofile

У файл _vimrc.

Примітка. Це пряма відповідь на запитання (для Windows 10) і, мабуть, не найбезпечніше (читайте інші відповіді), але це найшвидше рішення в моєму випадку.


0

У мене це налаштування в моєму Ubuntu .vimrc. У файлах проекту я не бачу файлів своп.

set undofile
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

set backup                        " enable backups
set swapfile                      " enable swaps
set undodir=$HOME/.vim/tmp/undo     " undo files
set backupdir=$HOME/.vim/tmp/backup " backups
set directory=$HOME/.vim/tmp/swap   " swap files

" Make those folders automatically if they don't already exist.
if !isdirectory(expand(&undodir))
    call mkdir(expand(&undodir), "p")
endif
if !isdirectory(expand(&backupdir))
    call mkdir(expand(&backupdir), "p")
endif
if !isdirectory(expand(&directory))
    call mkdir(expand(&directory), "p")
endif
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.