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

Jaki jest najprostszy sposób na usunięcie plików swapfile Vima, które już odzyskałem?

Czasami Vim zawiesza się i zostawia mi plik swapfile. To jest niesamowite. Następnie otwieram plik, który edytowałem i Vim pyta mnie, czy chcę go odzyskać. Chcę, dzięki. Kiedy to robię, Vim mówi mi,

You may want to delete the .swp file now.

Dlaczego, tak, chcę. Jak mam to zrobić? Pomyślałem, że po prostu zacznę używać starego pliku swapfile jako pliku swapfile ponownie i posprzątać go, kiedy odejdę, ale to nieprawda. Robi nowy, czyści ten plik, a kiedy ponownie otworzę plik, to znów podpowiada mi, że powinienem odzyskać ten pierwszy.

Na pewno czegoś mi brakuje.

Odpowiedzi (12)

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

Nieco prostszy sposób:

Z emulatora terminala:

vim filename

Następnie wybierz recover, a jeśli chcesz usunąć swap write (zapisz), a następnie zrób to od wewnątrz vima:

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

…i wybierz delete tym razem.

Właśnie się o tym dowiedziałem i myślę, że od teraz będę to robić. Wtedy też przypadkowo nie nadpiszę pliku roboczego, jeśli odzyskanie okaże się uszkodzone (choć nigdy wcześniej tego nie próbowałem).

Istnieją też odpowiednie wskazówki w tym pytaniu na temat Przepełnienia stosu (gdzie znalazłem tę wskazówkę).

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

To Clean out ALL vim Swap Files in a Directory:

If you are sure you don’t need any vim swap files in a directory tree and want to get rid of them, you can use the following command in the directory while vim is not running (not even in another window or even a different login session):

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

Some inspiration and thoughts came from Removing junk . swp files at Google Groups.  Spowoduje to usunięcie wszystkich plików, których nazwy kończą się na .swk, .swl, .swm, .swn, .swo, lub .swp w aktualnym drzewie katalogów.

Może to nie być to co chcesz, z kilku powodów:

  • Jak podano, przeszukuje aktualny katalog tree ; tj, aktualny katalog i wszystkie podkatalogi, recursively.  To wykracza poza to, o co prosi pytanie, i może być uznane za overkill.
  • Jak podano, usunie wszystkie pliki, których nazwy kończą się na .swk, .swl, .swm, .swn, lub .swo, a nie tylko na .swp. &nbsp Gary Johnson mówi ,

  • Z drugiej strony, może to być underkill.&nbsp rouble suggests

  • Może to być overkill.   Jak wspomniano, usunie wszystkie pliki, których nazwy kończą się na .swp, .swk, .swl, .swm, .swn, lub .swo.  Ale, jak widać, pliki vim swap są zwykle “dot” files.  Jeśli edytujesz .swp, plik swap może być hello.cpp.  Jak pokazano (ale nie wyjaśniono) w odpowiedzi rubla , bezpieczniej jest kasować tylko pliki, których nazwy zaczynają się od kropki; np, z .

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

Type ls -a which lists ALL the files in the directory

type rm .whatever.your.swp is and press enter

Its that simple.

Any file that shows with . in front is a hidden file and is not normally seen.

Remember that changes are immediate and permanent so be careful.

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

Btw. Niektóre wtyczki robią to automatycznie dla ciebie: autoswap.vim

z opisu:

  1. Czy plik jest już otwarty w innej sesji Vima w innym oknie?
  2. Jeśli tak, zamień na okno, w którym edytujemy ten plik.
  3. W przeciwnym razie, jeśli plik swapowy jest starszy niż sam plik, po prostu pozbądź się go.
  4. W przeciwnym razie, otwórz plik tylko do odczytu, abyśmy mogli go obejrzeć i zapisać.
6
6
6
2012-09-27 15:00:27 +0000

Nie, AFAIK nic ci nie umknie. Vim kontynuuje przechowywanie pliku swap jako kopii zapasowej, aż do momentu jego wyraźnego usunięcia.

Po prostu zapisz i zakończ i otwórz ponownie ten sam plik. Zostaniesz zapytany (ponownie) z

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

Teraz po prostu naciśnij d :)

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

Vim, jak większość komend uniksowych, jest prosty i jednoznaczny, zamiast zakładać i ukrywać.

Odzyskujesz za pomocą ®. Nie podoba ci się odzyskiwanie lub odzyskiwanie jest uszkodzone, możesz je wyrzucić. Jeśli ci się to podoba, możesz zapisać plik. Plik odzyskiwania nie jest usuwany dla Ciebie, ponieważ nie jest to jednoznaczne i nie będzie poprawny w 100% sytuacji.

Więc ®ecover, (w)rite i (q)uit, a następnie albo edytować ponownie i wybrać (d)elete lub “rm .myfile.js.swp” i edytować ponownie. To jest szybkie do zrobienia i zawsze jest, z punktu widzenia Vima, w 100% poprawne zachowanie.

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

Oto fragment do dodania w .vimrc. Usuwa on wszystkie pliki swap, które są powiązane z bieżącym buforem pliku i resetuje rozszerzenie swap.

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()

Po spotkaniu z sytuacją można wykonać :DeleteFileSwapsTo świetnie, jeśli połączy się z komendami :windo lub :tabdo.

:tabdo DeleteFileSwaps

Dalsze szczegóły : Plik może mieć więcej niż 1 plik swap. Powodem jest to, że plik swap, z rozszerzeniem .swp, nadal istnieje i vim będzie nadal tworzyć nowe z jego powodu. Aby dowiedzieć się, czy .swp istnieje:

  • Przy otwartym pliku docelowym w vimie, wykonaj :sw, aby uzyskać bieżący plik swap.
  • Sprawdź katalog, w którym znajduje się bieżący plik swap.
  • Następnie sprawdź, czy katalog zawiera plik swap z nazwą otwartego pliku i rozszerzeniem .swp.

Powyższy fragment postępuje tak samo, ale usuń wszystkie pliki swap.

Mam nadzieję, że to pomoże.

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

Te pliki były irytujące dla mnie, ale ustawiłem opcję w .vimrc - set noswapfile, aby uniemożliwić vimowi tworzenie i zamiast tego przechowywanie plików w pamięci.

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

Oto bardziej kompletny regex do czyszczenia wszystkich plików vim swap na podstawie własnego pliku Github gitignore dla Vim

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

Bądź jednak ostrożny, choć jest to bardziej kompletne rozwiązanie, to usunie wszystkie pliki obrazów .svg i .swf adobe flash. Jeśli pracujesz z tymi plikami, możesz chcieć zmodyfikować regex.

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

Z instrukcji obsługi :h swap:

Możesz zobaczyć nazwę aktualnego pliku swap używanego przy użyciu polecenia: :sw[apname]

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

Jeśli zostaniesz poproszony, naciśnij D, aby usunąć plik swap bieżącego pliku.

Jeśli nie, musisz to zrobić ręcznie.

Jeden z alternatywnych sposobów to:

aby zlokalizować/wyszukać plik:

find | grep ".searchRefineVertTabs.jsp.swp"

a następnie usunąć ten plik:

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

Możesz użyć,

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

Przykład:

rm -f .rc.local.swp