Как запретить vim создавать (и оставлять) временные файлы?

163

Почему vim создает <filename>~файлы? Есть ли способ отключить это?

Если это для резервного копирования (или что-то), я использую Git для этого.

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

Как мне сказать vim не создавать их или, по крайней мере, очищать после себя?

РЕДАКТИРОВАТЬ

упс, дубликат:

Почему 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
Hasen
источник
13
Git никогда не поможет вам восстановить работу после сбоя системы. Git также может игнорировать ваши * .swp файлы. = D
vmassuchetto
LOL кто-то серьезно пометил этот вопрос как дубликат после шести лет публикации?
hasen

Ответы:

80

Я настоятельно рекомендую продолжать работать с файлами подкачки (в случае сбоя Vim).

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

set swapfile
set dir=~/tmp

Смотрите также

:help swap-file
user55400
источник
4
ну, я никогда не нуждался в них с notepad ++, если только вы не говорите, что vim будет зависать слишком часто!
hasen
8
нет, я не имел в виду, что vim падает слишком часто (хотя я видел, как он падает). Но для моей рабочей среды сетевое подключение к некоторому хосту, на котором я работаю, довольно нестабильно, поэтому происходит прерывистое редактирование. Помогите там файлы подкачки.
user55400
9
@ user55400 слышал о GNU / Экран? (или tmux, или эта японская альтернатива)
Элазар Лейбович
Я добавил это в свой файл _vimrc в Windows, и я все еще получаю файл ~ файлы. Я что-то не правильно делаю?
FilBot3
2
@noircc Я бы не советовал использовать / tmp. В случае сбоя всей системы и необходимости перезагрузки ваши файлы подкачки исчезнут.
57

Поместите это в ваш конфигурационный файл .vimrc.

set nobackup
Чад берез
источник
5
Мы сделали это на Windows 8.1 с Vim. Файлы подкачки все еще присутствуют.
Шон Луттин
1
Шон, вам может понадобиться добавить "set noswapfile" в ваш .vimrc, чтобы предотвратить создание новых файлов подкачки, как упоминалось в редактировании исходного вопроса.
Эрл Зедд
А как насчет :сидения в качестве префикса перед setключевым словом? Это обязательно? Это не похоже на комментарий ..
Стефан
@Stephane :префикс означает, что он выполнен в командном режиме, но вам не нужен :при написании vimrc
TankorSmash
Это не очень хорошая идея. Вышеуказанное размещение этих файлов в папке temp / уже намного лучше.
MonsieurMan
36

; Для пользователей Windows вернуться во временный каталог

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup
Sooraj
источник
6
Мне пришлось добавить set undodir = C: \ WINDOWS \ Temp
Это не сработало для меня - вместо этого мне пришлось использовать set dir = $ TEMP
Фрэнк Шмитт
10

Я создал плагин под названием «noswapsuck», который включает файл подкачки только тогда, когда буфер содержит несохраненные изменения. После сохранения изменений файл подкачки очищается. Следовательно, файлы подкачки, содержащие тот же контент, что и файл на диске, будут удалены.

Получи это здесь: noswapsuck.vim

Это работает хорошо для меня, но я никогда не публиковал его раньше, поэтому я хотел бы получить обратную связь.

Преимущества:

  • Единственные файлы подкачки, которые остаются на вашем диске, будут важными файлами подкачки, которые фактически отличаются от файла!

Недостатки:

  • Если в буфере есть файл подкачки, он не будет обнаружен при первом открытии файла. Он будет обнаружен только при swapfileвключении, то есть когда вы начнете редактировать буфер. Это досадно поздно, и прервет вас. (Решено: теперь мы проверяем существующий файл подкачки при открытии буфера, временно swapfileснова включив этот параметр.)

  • Если вы работаете в среде, в которой вы хотите свести к минимуму записи на диск (например, с низким энергопотреблением, или файлы, смонтированные по сети, или редактировать огромный файл), то не стоит продолжать удалять и заново создавать файл подкачки на каждом сохранить и редактировать. В таких ситуациях вы можете сделать:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    который сохранит файл подкачки после записи, но все равно удалит его, когда буфер потеряет фокус.

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

joeytwiddle
источник
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) и, вероятно, не самый безопасный способ (см. Другие ответы), но это самое быстрое решение в моем случае.

wlwl2
источник
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
Раза
источник