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

Wat is de makkelijkste manier om Vim swapfiles te verwijderen waar ik al van hersteld ben?

Soms crasht Vim en laat me een swapfile achter. Dat is geweldig. Dan open ik het bestand dat ik aan het bewerken was en Vim vraagt me of ik wil herstellen. Dat doe ik, bedankt. Als het klaar is, vertelt Vim me,

You may want to delete the .swp file now.

Waarom, ja, dat doe ik. Hoe doe ik dat? Ik dacht dat het gewoon weer zou beginnen met het oude swapfile te gebruiken als een swapfile en het op te ruimen als ik ermee stop, maar dat is niet waar. Het maakt een nieuwe, ruimt die op, en als ik het bestand weer open, vraagt het me weer om te herstellen van de eerste.

Ik mis zeker iets.

Antwoorden (12)

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

Een iets eenvoudigere manier:

Vanuit de terminal emulator: vim filename

Kies dan recover, en als je de swap wilt verwijderen moet je write (opslaan) en dan doe je dit vanuit vim: :e // no argument needed. It assumes the current buffer.

…en kies dan delete deze keer.

Ik ben hier net achter gekomen, en ik denk dat ik dat vanaf nu ook ga doen. Dan zal ik ook niet per ongeluk een werkend bestand overschrijven, als het herstel corrupt blijkt te zijn (al heb ik dat nog nooit geprobeerd).

Er zijn ook relevante tips over deze vraag op Stack Overflow (waar ik deze tip vond).

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

Om ALLE vim Swap Files in een directory op te schonen:

Als je zeker weet dat je geen vimswap bestanden in een directory tree nodig hebt en er vanaf wilt, kan you het volgende commando in de directory gebruiken terwijl vim niet draait (zelfs niet in een ander venster of zelfs niet in een andere login sessie):

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

Sommige inspiratie en gedachten kwamen van Verwijderen van junk . swp-bestanden bij Google Groups.  Dit verwijdert alle bestanden waarvan de naam eindigt met .swk, .swl, .swm, .swn, .swo, of .swp in de huidige mapstructuur.

Dit is misschien niet wat u wilt, om verschillende redenen:

  • Zoals gezegd zoekt het in de huidige map boom ; dat wil zeggen, de huidige directory en alle submappen, recursief.  Dat gaat verder dan wat de vraag vraagt, en kan als overkill worden beschouwd.
  • Zoals gezegd, zal het alle bestanden verwijderen waarvan de naam eindigt met .swk, .swl, .swm, .swn, of .swo, en niet alleen .swp. &nbsp Gary Johnson zegt ,

  • Aan de andere kant kan het underkill.&nbsp roebel suggereert

  • Het kan overkill zijn.   Zoals gezegd worden alle bestanden verwijderd waarvan de naam eindigt met .swp, .swk, .swl, .swm, .swn, of .swo.  Maar blijkbaar zijn vimswapbestanden meestal “dot” bestanden.  Als u .swp bewerkt, kan het wisselbestand hello.cpp.&nbsp zijn; Zoals getoond (maar niet uitgelegd) in roebels antwoord , is het veiliger om alleen bestanden te verwijderen waarvan de naam begint met een punt; bijvoorbeeld, met

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

Type ls -a die ALLE bestanden in de directory

opsomt type rm .whatever.your.swp is en druk op enter

is zo eenvoudig.

Elk bestand dat getoond wordt met . voorin is een verborgen bestand en wordt normaal gesproken niet gezien.

Onthoud dat wijzigingen direct en permanent zijn dus wees voorzichtig.

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

Btw. sommige plugins doen dat automatisch voor je: autoswap.vim

uit de beschrijving:

  1. Is het bestand al geopend in een andere Vim-sessie in een ander venster?
  2. Zo ja, wissel dan naar het venster waar we dat bestand bewerken.
  3. Op een andere manier, als het wisselbestand ouder is dan het bestand zelf, verwijder het dan gewoon.
  4. Open anders het bestand alleen-lezen, zodat we er naar kunnen kijken en het kunnen opslaan.
6
6
6
2012-09-27 15:00:27 +0000

Nee, AFAIK je mist niets. Vim blijft het wisselbestand als backup bewaren totdat je het expliciet verwijdert.

Sla gewoon op en sluit af en open hetzelfde bestand opnieuw. Je wordt (opnieuw) gevraagd met

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

. Druk nu gewoon op d :)

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

Vim is, zoals de meeste Unix commando’s, eenvoudig en expliciet, in plaats van aan te nemen en impliciet.

Je herstelt met ®. Als het herstel niet goed is of als het herstel corrupt is, kun je het weggooien. Als je het wel leuk vindt, kun je het bestand opslaan. Het herstelbestand wordt niet voor u verwijderd omdat dit niet expliciet is en niet correct zal zijn voor 100% van de situaties.

Dus u ®ecover, (w)rite en (q)uit, dan ofwel opnieuw bewerken en kiezen voor (d)elete of “rm .myfile.js.swp” en opnieuw bewerken. Dit is snel gedaan en is altijd, vanuit Vim’s oogpunt, 100% correct gedrag.

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

Hier is een stukje om toe te voegen in .vimrc. Het verwijdert alle swap bestanden die geassocieerd zijn met de huidige bestandsbuffer en reset swap extensie.

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

Als men eenmaal in aanraking komt met de situatie, kan men :DeleteFileSwaps uitvoeren Dit is geweldig als het gecombineerd wordt met :windo of :tabdo commando’s.

:tabdo DeleteFileSwaps

Verdergaande details : Een bestand kan meer dan 1 wisselbestand hebben. De reden hiervoor is dat het wisselbestand, met uitbreiding van .swp, nog steeds bestaat en vim hierdoor steeds nieuwe zal blijven aanmaken. Om te weten te komen of .swp bestaat:

  • Met het doelbestand open in vim, voer :sw uit om het huidige wisselbestand te krijgen.
  • Controleer de map waarin het huidige wisselbestand zich bevindt.
  • Controleer vervolgens of de map een wisselbestand bevat met de naam van het geopende bestand en een extensie van .swp heeft.

Het bovenstaande fragment volgt hetzelfde proces, maar verwijder alle wisselbestanden.

Hoop dat dit helpt.

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

Deze bestanden waren ook vervelend voor mij, maar ik heb de optie in .vimrc - set noswapfile ingesteld om te voorkomen dat vim het maakt en in plaats daarvan bestanden in het geheugen te houden.

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

Hier is een meer complete regex om alle vimswisselbestanden op te schonen op basis van Github’s eigen gitignore bestand voor Vim $ find ./ -type f \( -name "\.*\.s[a-v][a-z]" -o -name "\.*\.sw[a-p]" \) -delete

Wees echter voorzichtig, terwijl dit een meer complete oplossing is, het zal alle .svg afbeeldingsbestanden en .swf adobe flash-bestanden verwijderen. Het kan zijn dat u de regex wilt wijzigen als u met die bestanden werkt.

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

Uit de handleiding :h swap:

U ziet de naam van het huidige wisselbestand dat wordt gebruikt met het commando: :sw[apname]

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

als u gevraagd wordt, druk dan op D om het wisselbestand van het huidige bestand te verwijderen.

als u dat niet bent, dan moet u het handmatig doen.

een alternatieve manier om dit te doen is:

om het bestand te lokaliseren/zoeken: find | grep ".searchRefineVertTabs.jsp.swp"

en verwijder dan dit bestand:

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

U kunt gebruik maken van,

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

Voorbeeld:

rm -f .rc.local.swp