2012-09-27 14:47:47 +0000 2012-09-27 14:47:47 +0000
89
89

Какой самый простой способ удалить Vim swapfiles, из которых я уже восстановил?

Иногда Vim ломается и оставляет мне swap-файл. Это потрясающе. Потом я открываю файл, который редактировал, и Вим спрашивает меня, хочу ли я восстановить. Хочу, спасибо. Когда он закончит, Вим скажет мне,

You may want to delete the .swp file now.

Почему, да, я хочу. Как мне это сделать? Я подумал, что он просто снова начнет использовать старый своп-файл как своп-файл и почистит его, когда я уйду, но это не так. Он делает новый, очищает его, и когда я открываю файл снова, он подсказывает мне, что я должен восстановиться с первого.

Уверен, я что-то пропустил.

Ответы (12)

86
86
86
2013-12-13 12:39:26 +0000

Несколько более простой способ:

Из терминального эмулятора:

vim filename

Затем выберите recover, и если вы хотите удалить swap вы write (сохранить), а затем сделать это из vim:

:e // no argument needed. It assumes the current buffer.

… и выберите delete на этот раз.

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

Также есть соответствующие подсказки по этому вопросу на Stack Overflow (где я нашел эту подсказку).

40
40
40
2014-08-30 18:39:56 +0000

To Clean out ALL vim Swap Files in a Directory:

Если вы уверены, что вам не нужны файлы vim swap в дереве каталогов и хотите избавиться от них, вы можете использовать следующую команду в каталоге, когда vim not запущен (даже в другом окне или даже в другом сеансе входа):

find . -type f -name "*.sw[klmnop]" -delete

Некоторые вдохновения и мысли пришли из [ Удаление мусора ] . swp файлов ](https://groups.google.com/forum/#!topic/vim_use/JBHSs3kPPJU)at Google Groups.  При этом удаляются все файлы, имена которых заканчиваются на .swk, .swl, .swm, .swn, .swo или .swp в текущем дереве каталогов.

Это может быть не то, что вы хотите по нескольким причинам:

  • Как уже говорилось, он ищет текущий каталог tree ; т.е.., текущий каталог и все подкаталоги, recursively.  Это выходит за рамки заданного вопроса и может быть расценено как перебор.
  • Как уже говорилось, он удалит все файлы, имена которых заканчиваются на .swk, .swl, .swm, .swn, .swo, .swp, или .swp, а не только .swk. &nbsp Гэри Джонсон говорит ,

  • С другой стороны, это может быть underkill.&nbsp рубль предполагает

  • Это может быть перебор.   Как уже говорилось, удаляются все файлы, имена которых заканчиваются на .swl, .swm, .swn, .swo, .swp, hello.cpp, или .hello.cpp.swp.  Но, по-видимому, файлы подкачки vim обычно являются “точечными” файлами.  Если вы редактируете &007, то файл подкачки может быть &007.  Как показано (но не объяснено) в ответе rouble’s answer , безопаснее удалять только те файлы, имена которых начинаются с точки; например, ]&003, с

14
14
14
2013-12-21 17:14:36 +0000

Введите ls -a, в котором перечислены ВСЕ файлы в каталоге

.

.

Любой файл, который отображается с rm .whatever.your.swp впереди, является скрытым файлом и обычно не видно.

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

7
7
7
2015-08-04 20:27:23 +0000

Кстати, некоторые плагины делают это автоматически за вас: autoswap.vim

из описания:

  1. Файл уже открыт в другой сессии Vim в другом окне?
  2. Если да, подкачайте в окно, где мы редактируем этот файл.
  3. В противном случае, если файл подкачки старше, чем сам файл, просто избавьтесь от него.
  4. В противном случае, откройте файл только для чтения, чтобы мы могли взглянуть на него и сохранить.
6
6
6
2012-09-27 15:00:27 +0000

Нет, AFAIK вы ничего не упускаете. Vim продолжает хранить файл подкачки как резервную копию до тех пор, пока вы явно не удалите его.

Просто сохраните, выйдите и снова откройте тот же самый файл. Вам будет предложено (снова) нажать

[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete it

Теперь просто нажмите d :)

2
2
2
2013-09-27 09:40:43 +0000

Vim, как и большинство Unix-команд, прост и понятен, а не предполагает и неявно.

Вы восстанавливаетесь с помощью ®. Вам не нравится восстановление или восстановление повреждено, вы можете отбросить его. Если вам понравится, вы можете сохранить файл. Файл восстановления не удаляется, потому что это не является явным и не будет корректным для 100% ситуаций.

Так что вы ®ecover, (w)rite и (q)uit, затем либо отредактируйте снова и выберите (d)elete или “rm .myfile.js.swp” и отредактируйте заново. Это быстро и всегда, с точки зрения Вима, 100% правильное поведение.

1
1
1
2017-06-18 21:48:08 +0000

Вот фрагмент для добавления в .vimrc. Он удаляет все файлы подкачки, связанные с текущим файловым буфером и сбрасывает расширение подкачки.

function! DeleteFileSwaps()
    write
    let l:output = ''
    redir => l:output 
    silent exec ':sw' 
    redir END 
    let l:current_swap_file = substitute(l:output, '\n', '', '')
    let l:base = substitute(l:current_swap_file, '\v\.\w+$', '', '')
    let l:swap_files = split(glob(l:base.'\.s*'))
    " delete all except the current swap file
    for l:swap_file in l:swap_files
        if !empty(glob(l:swap_file)) && l:swap_file != l:current_swap_file 
            call delete(l:swap_file)
            echo "swap file removed: ".l:swap_file
        endif
    endfor
    " Reset swap file extension to `.swp`.
    set swf! | set swf!
    echo "Reset swap file extension for file: ".expand('%')
endfunction
command! DeleteFileSwaps :call DeleteFileSwaps()

После столкновения с затруднительным положением, можно выполнить :DeleteFileSwapsЭто замечательно, если объединить с :windo или :tabdo команд.

:tabdo DeleteFileSwaps

Детали : Файл может содержать более 1 файла подкачки. Причина в том, что файл подкачки с расширением .swp все еще существует и vim будет продолжать создавать новые из-за этого. Чтобы узнать, существует ли .swp:

  • С открытым в vim файлом, выполните :sw, чтобы получить текущий файл подкачки.
  • Проверьте каталог, в котором находится текущий файл подкачки.
  • Затем проверьте, содержит ли каталог файл подкачки с именем открытого файла и имеет ли он расширение .swp.

Сниппет, приведенный выше, следует тому же самому процессу, но удалите все файлы подкачки.

Надеюсь, это поможет.

1
1
1
2016-06-23 12:03:20 +0000

Эти файлы тоже меня раздражали, но я установил опцию в .vimrc - set noswapfile, чтобы vim не создавал их, а вместо этого сохранял файлы в памяти.

1
1
1
2017-06-07 15:33:24 +0000

Вот более полный регекс для очистки всех файлов vim swap на основе собственного файла gitignore для Vim

$ find ./ -type f \( -name "\.*\.s[a-v][a-z]" -o -name "\.*\.sw[a-p]" \) -delete

Будьте осторожны, хотя это более полное решение, оно удалит все .svg файлы изображений и .swf adobe флэш-файлы. Возможно, вы захотите изменить регекс, если работаете с этими файлами.

0
0
0
2015-01-26 20:03:16 +0000

Из руководства :h swap:

Вы можете увидеть имя текущего файла подкачки, который используется с командой: :sw[apname]

0
0
0
2015-09-22 12:05:33 +0000

если вас попросили, то нажмите D, чтобы удалить файл подкачки текущего файла.

, если нет, то вы должны сделать это вручную.

Один из альтернативных способов сделать это:

, чтобы найти/поиск файла:

find | grep ".searchRefineVertTabs.jsp.swp"

, а затем удалить этот файл:

rm ./.searchRefineVertTabs.jsp.swp
-1
-1
-1
2015-03-18 08:48:14 +0000

Вы можете использовать,

rm -f .<filename>.<ext>.swp

Пример:

rm -f .rc.local.swp

Похожие вопросы

8
4
5
6
8