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

Was ist der einfachste Weg, Vim-Auslagerungsdateien zu löschen, von denen ich mich bereits erholt habe?

Manchmal stürzt Vim ab und hinterlässt mir eine Auslagerungsdatei. Das ist großartig. Dann öffne ich die Datei, die ich editiert habe, und Vim fragt mich, ob ich sie wiederherstellen will. Das möchte ich, danke. Wenn es fertig ist, sagt Vim mir,

You may want to delete the .swp file now.

Warum, ja, ich will. Wie mache ich das? Ich dachte, es würde einfach wieder anfangen, die alte Auslagerungsdatei als Auslagerungsdatei zu benutzen und sie aufräumen, wenn ich aufhöre, aber das stimmt nicht. Es erstellt eine neue Auslagerungsdatei, räumt diese auf, und wenn ich die Datei erneut öffne, fordert es mich erneut auf, von der ersten Datei wiederherzustellen.

Sicherlich fehlt mir etwas.

Antworten (12)

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

Ein etwas einfacherer Weg:

Vom Terminal-Emulator aus:

vim filename

Dann wählen Sie wiederherstellen, und wenn Sie den Swap löschen wollen, schreiben (speichern) und dann tun Sie dies aus vim heraus:

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

…und wählen Sie diesmal löschen. Dann werde ich auch nicht versehentlich eine Arbeitsdatei überschreiben, wenn sich die Wiederherstellung als korrupt herausstellt (obwohl ich das noch nie zuvor versucht habe).

Es gibt auch relevante Tipps zu dieser Frage zu Stack Overflow (wo ich diesen Tipp gefunden habe).

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

Um ALLE vim-Auslagerungsdateien in einem Verzeichnis zu bereinigen:

Falls Sie sicher sind, dass Sie keine vim-Auslagerungsdateien in einem Verzeichnisbaum brauchen und sie loswerden wollen, können Sie den folgenden Befehl im Verzeichnis benutzen, während vim nicht läuft (nicht einmal in einem anderen Fenster oder sogar einer anderen Anmeldesitzung):

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

Einige Inspiration und Gedanken kamen von Junk entfernen . swp-Dateien bei Google Groups.  Dies löscht alle Dateien, deren Namen mit .swk, .swl, .swm, .swn, .swo, .swp oder .swk im aktuellen Verzeichnisbaum enden.

Dies ist vielleicht nicht das, was Sie wollen, aus mehreren Gründen:

  • Wie gesagt, es durchsucht das aktuelle Verzeichnis tree ; d.h, das aktuelle Verzeichnis und alle Unterverzeichnisse, rekursiv.  Das geht über das hinaus, was die Frage verlangt, und kann als Overkill angesehen werden.
  • Wie gesagt, es löscht alle Dateien, deren Namen mit .swl, .swm, .swn, .swo, .swp, .swp oder .swk enden, und nicht nur .swl. &nbsp Gary Johnson sagt ,

  • Andererseits könnte es sich um Underkill handeln.&nbsp rouble suggeriert

  • Es könnte sich um Overkill handeln.   Wie gesagt, es wird alle Dateien löschen, deren Namen mit .swm, .swn, .swo, .swp, hello.cpp, .hello.cpp.swp oder &007.&nbsp enden; Aber anscheinend sind Auslagerungsdateien von Vim gewöhnlich “Punkt”-Dateien.  Wenn Sie &007 editieren, könnte die Auslagerungsdatei &007.&nbsp sein; Wie in roubles Antwort gezeigt (aber nicht erklärt), ist es sicherer, nur Dateien zu löschen, deren Namen mit einem Punkt beginnen; z.B, mit

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

Geben Sie ls -a ein, das ALLE Dateien im Verzeichnis auflistet

geben Sie rm .whatever.your.swp is ein und drücken Sie die Eingabetaste

So einfach ist das.

Jede Datei, die mit . davor angezeigt wird, ist eine versteckte Datei und wird normalerweise nicht gesehen.

Denken Sie daran, dass Änderungen sofort und dauerhaft sind, seien Sie also vorsichtig.

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

Übrigens machen das einige Plugins automatisch für Sie: autoswap.vim

aus der Beschreibung:

  1. Ist die Datei bereits in einer anderen Vim-Sitzung in einem anderen Fenster geöffnet?
  2. Falls ja, wechseln Sie zu dem Fenster, wo wir diese Datei editieren:
  3. Andernfalls, falls die Auslagerungsdatei älter als die Datei selbst ist, werden Sie sie einfach los.
  4. Andernfalls öffnen Sie die Datei schreibgeschützt, damit wir sie uns ansehen und speichern können.
6
6
6
2012-09-27 15:00:27 +0000

Nein, AFAIK fehlt Ihnen nichts. Vim behält die Auslagerungsdatei weiterhin als Backup, bis Sie sie explizit löschen.

Speichern Sie einfach und beenden Sie und öffnen Sie die gleiche Datei erneut. Sie werden (erneut) mit

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

aufgefordert, jetzt drücken Sie einfach d :)

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

Vim ist, wie die meisten Unix-Befehle, einfach und explizit, anstatt annehmend und implizit.

Sie erholen sich mit ®. Falls Ihnen die Wiederherstellung nicht gefällt oder die Wiederherstellung korrupt ist, können Sie sie verwerfen. Wenn es Ihnen gefällt, können Sie die Datei speichern. Die Wiederherstellungsdatei wird nicht für Sie gelöscht, weil dies nicht explizit ist und nicht für 100% der Situationen korrekt sein wird.

Sie ®ecover, (w)rite und (q)uit, dann entweder erneut editieren und (d)elete wählen oder “rm .myfile.js.swp” und erneut editieren. Dies ist schnell zu machen und ist immer, aus Vims Sicht, 100% korrektes Verhalten.

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

Hier ist ein Schnipsel zum Hinzufügen in .vimrc. Es löscht alle Auslagerungsdateien, die mit dem aktuellen Dateipuffer verbunden sind, und setzt die Auslagerungserweiterung zurück.

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

Sobald man mit der misslichen Lage konfrontiert ist, kann man :DeleteFileSwaps ausführen Dies ist großartig, wenn man es mit den Befehlen :windo oder :tabdo kombiniert.

:tabdo DeleteFileSwaps

Weitere Einzelheiten : Eine Datei kann mehr als 1 Auslagerungsdatei haben. Der Grund dafür ist, dass die Auslagerungsdatei mit der Erweiterung .swp immer noch existiert und vim deshalb immer wieder neue erstellt. Um herauszufinden, ob .swp existieren:

  • Wenn die Zieldatei in vim geöffnet ist, führen Sie :sw aus, um die aktuelle Auslagerungsdatei zu erhalten.
  • Prüfen Sie das Verzeichnis, in dem die aktuelle Auslagerungsdatei enthalten ist.
  • Prüfen Sie dann, ob das Verzeichnis eine Auslagerungsdatei mit dem Namen der geöffneten Datei enthält und die Erweiterung .swp hat.
1
1
1
2016-06-23 12:03:20 +0000

Diese Dateien waren auch für mich ärgerlich, aber ich setzte die Option in .vimrc - set noswapfile, um zu verhindern, dass Vim sie erstellt und stattdessen Dateien im Speicher hält.

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

Hier ist ein vollständigerer Regex, um alle Vim-Auslagerungsdateien basierend auf Githubs eigener Gitignore-Datei für Vim

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

zu bereinigen. Seien Sie jedoch vorsichtig, obwohl dies eine vollständigere Lösung ist, wird sie alle .svg-Bilddateien und .swf-Adobe-Flash-Dateien entfernen. Wenn Sie mit diesen Dateien arbeiten, sollten Sie vielleicht die Regex ändern.

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

Aus dem Handbuch :h swap:

Sie können den Namen der aktuell verwendeten Auslagerungsdatei mit dem Befehl: :sw[apname]

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

wenn Sie gefragt werden, dann drücken Sie D, um die Auslagerungsdatei der aktuellen Datei zu löschen.

wenn Sie nicht gefragt werden, dann müssen Sie es manuell tun.

eine alternative Möglichkeit, dies zu tun, ist:

um die Datei zu lokalisieren/suchen:

find | grep ".searchRefineVertTabs.jsp.swp"

und dann diese Datei zu löschen:

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

Sie können verwenden,

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

Beispiel:

rm -f .rc.local.swp