it-swarm.com.de

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

Manchmal stürzt Vim ab und hinterlässt eine Swap-Datei. Das ist großartig. Dann öffne ich die Datei, die ich gerade bearbeitete, und Vim fragt mich, ob ich sie wiederherstellen möchte. Ich mache, danke. Wenn es fertig ist, sagt Vim mir,

You may want to delete the .swp file now.

Warum, ja, ich tue es. Wie mache ich das? Ich dachte, es würde einfach anfangen, die alte Auslagerungsdatei wieder als Auslagerungsdatei zu verwenden und sie beim Beenden zu bereinigen, aber das stimmt nicht. Es erstellt eine neue Datei, räumt diese auf und fordert mich beim erneuten Öffnen der Datei erneut auf, die erste wiederherzustellen.

Ich vermisse sicher etwas.

74
Peeja

Ein etwas einfacherer Weg:

Vom Terminalemulator aus:

vim filename

Wählen Sie dann recover , und wenn Sie den Swap löschen möchten, geben Sie write (save) ein und führen Sie dies in vim aus:

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

... und wähle diesmal delete .

Ich habe es gerade herausgefunden und ich denke, ich werde das von jetzt an tun. Dann überschreibe ich auch nicht versehentlich eine Arbeitsdatei, wenn die Wiederherstellung fehlerhaft verlaufen ist (obwohl ich das noch nie versucht habe).

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

75
miyalys

So bereinigen Sie ALLE vim Swap-Dateien in einem Verzeichnis:

Wenn Sie sicher sind, dass Sie keine vim-Auslagerungsdateien in einem Verzeichnisbaum benötigen und diese entfernen möchten, können Sie den folgenden Befehl im Verzeichnis verwenden, während vim not ausgeführt wird (nicht einmal in einem anderen Verzeichnis) Fenster oder auch eine andere Anmeldesitzung):

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

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

Dies könnte aus mehreren Gründen nicht das sein, was Sie wollen:

32
Shwaydogg

Geben Sie ls -a ein, um ALLE Dateien im Verzeichnis aufzulisten

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

So einfach ist das.

Jede Datei, die mit . im Vordergrund angezeigt wird, ist eine versteckte Datei und wird normalerweise nicht angezeigt.

Denken Sie daran, dass Änderungen unmittelbar und dauerhaft sind. Seien Sie also vorsichtig.

13
Wolfy

Btw. Einige Plugins erledigen das 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. Wenn ja, wechseln Sie in das Fenster, in dem wir diese Datei bearbeiten.
  3. Wenn die Auslagerungsdatei älter als die Datei selbst ist, entfernen Sie sie einfach.
  4. Andernfalls öffnen Sie die Datei schreibgeschützt, damit wir sie anzeigen und speichern können.
7
toogley

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

Einfach speichern und beenden und dieselbe Datei erneut öffnen. Sie werden (erneut) aufgefordert mit

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

Drücken Sie jetzt einfach d :)

6
Avio

Vim ist, wie die meisten Unix-Befehle, einfach und explizit, nicht vorausgesetzt und implizit.

Sie erholen sich mit (r). Wenn Ihnen die Wiederherstellung nicht gefällt oder die Wiederherstellung beschädigt 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, da dies nicht explizit ist und in 100% der Fälle nicht korrekt ist.

Sie können also (r) entdecken, (w) riten und (q) beenden, dann entweder erneut bearbeiten und (d) elete oder "rm .myfile.js.swp" auswählen und erneut bearbeiten. Dies ist schnell erledigt und aus Sicht von Vim immer zu 100% korrekt.

2
Oli Comber

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

1
Dmitrii

Hier ist ein vollständigerer regulärer Ausdruck, um alle vim-Auslagerungsdateien zu bereinigen, die auf Githubs eigener gitignore-Datei für Vim basieren.

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

Beachten Sie jedoch, dass dies zwar eine umfassendere Lösung darstellt, jedoch alle SVG-Bilddateien und SWF-Adobe-Flash-Dateien entfernt werden. Möglicherweise möchten Sie den regulären Ausdruck ändern, wenn Sie mit diesen Dateien arbeiten.

1
rouble

Hier ist ein Ausschnitt, den Sie in .vimrc einfügen können. Es löscht alle Auslagerungsdateien, die dem aktuellen Dateipuffer zugeordnet 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 auf die missliche Lage stößt, kann man :DeleteFileSwaps ausführen. Dies ist großartig, wenn man es mit :windo- oder :tabdo-Befehlen kombiniert.

:tabdo DeleteFileSwaps 

Weitere Details : Eine Datei kann mehr als 1 Auslagerungsdatei haben. Der Grund dafür ist, dass die Auslagerungsdatei mit der Erweiterung .swp weiterhin vorhanden ist und vim deswegen weiterhin neue erstellt. Um herauszufinden, ob .swp existiert:

  • Führen Sie bei geöffneter Zieldatei in vim :sw aus, um die aktuelle Auslagerungsdatei abzurufen.
  • Überprüfen Sie das Verzeichnis, in dem sich die aktuelle Auslagerungsdatei befindet.
  • Überprüfen Sie dann, ob das Verzeichnis eine Auslagerungsdatei mit dem Namen der geöffneten Datei und der Erweiterung .swp enthält.

Das obige Snippet folgt demselben Vorgang, entfernt jedoch alle Auslagerungsdateien.

Hoffe das hilft.

1
nate

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

wenn Sie dies nicht tun, müssen Sie dies manuell tun.

ein alternativer Weg, dies zu tun, ist:

datei suchen/finden:

find | grep ".searchRefineVertTabs.jsp.swp"

und dann diese Datei löschen:

rm ./.searchRefineVertTabs.jsp.swp
0
Kaleem Ullah

Aus dem Handbuch :h swap:

Sie können den Namen der aktuellen Auslagerungsdatei sehen, die mit dem Befehl verwendet wird: :sw[apname]

0
JosephHarriott