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

Qual è il modo più semplice per cancellare i file di scambio Vim da cui ho già recuperato?

A volte Vim si blocca e mi lascia un file di scambio. È fantastico. Poi apro il file che stavo modificando e Vim mi chiede se voglio recuperare. Lo voglio, grazie. Quando è fatto, Vim mi dice,

You may want to delete the .swp file now.

Perché, sì, lo voglio. Come faccio? Ho pensato che avrei ricominciato a usare il vecchio file di scambio come file di scambio e che avrei ripulito tutto quando avessi smesso, ma non è vero. Ne crea uno nuovo, pulisce quello nuovo, e quando apro di nuovo il file mi spinge di nuovo a riprendermi dal primo.

Sicuramente mi manca qualcosa.

Respuestas (12)

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

Un modo un po’ più semplice:

Dall'emulatore di terminale:

vim filename

Allora scegliete recupera, e se volete cancellare lo swap scrivete (salvate) e poi fate questo da dentro vim:

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

…e scegliete cancella questa volta.

Ho appena scoperto questo, e penso che lo farò d'ora in poi. Poi non sovrascriverò accidentalmente neanche un file di lavoro, se il recupero risultasse corrotto (anche se non l'ho mai provato prima).

Ci sono anche dei suggerimenti rilevanti su questa domanda su Stack Overflow (dove ho trovato questo suggerimento).

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

Per ripulire TUTTI i file di swap vim in una directory:

Se siete sicuri di non aver bisogno di alcun file di swap vim in un albero di directory e volete sbarazzarvene, you potete usare il seguente comando nella directory mentre vim è non in esecuzione (nemmeno in un'altra finestra o in una diversa sessione di login):

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

Alcuni spunti e pensieri sono venuti da Rimozione della spazzatura . swp files at Google Groups.  Questo cancellerà tutti i file i cui nomi finiscono con .swk, .swl, .swm, .swn, .swo, .swp, .swk, .swl, o .swm nell'albero delle directory corrente.

Questo potrebbe non essere quello che si vuole, per diversi motivi:

  • Come detto, cerca la directory corrente tree ; cioè, la directory corrente e tutte le sottodirectory, ricorsivamente.  Questo va al di là di quanto richiesto dalla domanda e può essere considerato eccessivo.
  • Come detto, cancellerà tutti i file i cui nomi terminano con .swn, .swo, .swp, .swp, .swk, .swl, .swm, .swn, .swo, o .swp, e non solo hello.cpp. &nbsp Gary Johnson dice ,

  • D'altra parte, potrebbe essere underkill.&nbsp rublo suggerisce

  • Potrebbe essere overkill.   Come detto, cancellerà tutti i file i cui nomi finiscono con .hello.cpp.swp, &007, &007, &007, &007, &007, &007, &007, o &007.  Ma, apparentemente, i file di swap vim sono comunemente file “punti”.  Se si modifica &007, il file di swap potrebbe essere &007.  Come mostrato (ma non spiegato) nella risposta del rublo , è più sicuro cancellare solo i file i cui nomi iniziano con un punto; per esempio, con

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

Digitare ls -a che elenca TUTTI i file nella directory

tipo rm .whatever.your.swp è e premere invio

È così semplice.

Qualsiasi file che mostra con . davanti è un file nascosto e non viene normalmente visto.

Ricordate che i cambiamenti sono immediati e permanenti quindi fate attenzione.

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

Btw. alcuni plugin lo fanno automaticamente per voi: autoswap.vim

dalla descrizione:

  1. Il file è già aperto in un'altra sessione Vim in qualche altra finestra?
  2. Se sì, passare alla finestra dove stiamo modificando quel file.
  3. Altrimenti, se il file di swap è più vecchio del file stesso, basta sbarazzarsene.
  4. Altrimenti, aprire il file in sola lettura in modo che possiamo dargli un'occhiata e salvarlo.
6
6
6
2012-09-27 15:00:27 +0000

No, AFAIK non ti manca nulla. Vim continua a mantenere il file di swap come backup fino a quando non lo cancelli esplicitamente.

Basta salvare e chiudere e riaprire lo stesso file. Vi verrà richiesto (di nuovo) con

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

Ora basta premere d :)

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

Vim, come la maggior parte dei comandi Unix, è semplice ed esplicito, piuttosto che assumere e implicito.

Si recupera con ®. Se non vi piace il recupero o il recupero è corrotto, potete scartarlo. Se vi piace, potete salvare il file. Il file di recupero non viene eliminato per voi perché non è esplicito e non sarà corretto per il 100% delle situazioni.

Quindi si ®ecover, (w)rite e (q)uit, poi o si modifica di nuovo e si sceglie (d)elete o “rm .myfile.js.swp” e si modifica di nuovo. Questo è veloce da fare ed è sempre, dal punto di vista di Vim, un comportamento corretto al 100%.

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

Ecco un frammento da aggiungere in .vimrc. Cancella tutti i file di swap che sono associati al buffer del file corrente e ripristina l'estensione di 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()
``` ```
:tabdo DeleteFileSwaps

Una volta incontrato il problema, si può eseguire :DeleteFileSwapsQuesto è ottimo se combinato con i comandi :windo o :tabdo.

&001

Altri dettagli : Un file può avere più di 1 file di swap. La ragione è che il file di swap, con estensione .swp, esiste ancora e vim continuerà a crearne di nuovi a causa di esso. Per scoprire se .swp esiste:

  • Con il file di destinazione aperto in vim, eseguire :sw per ottenere il file di swap corrente.
  • Controllare la directory in cui è contenuto il file di swap corrente.
  • Poi controllare se la directory contiene un file di swap con il nome del file aperto e ha un'estensione di .swp.

Il frammento di cui sopra segue lo stesso processo, ma rimuovere tutti i file di swap.

Spero che questo aiuti.

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

Questi file erano fastidiosi anche per me, ma ho impostato l'opzione in .vimrc - set noswapfile per evitare che vim la crei e, invece, tenere i file in memoria.

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

Ecco un regex più completo per pulire tutti i file di swap vim basati sul file gitignore di Github per Vim

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

Attenzione però, anche se questa è una soluzione più completa, toglierà tutti i file immagine .svg e i file flash adobe .swf. Potreste voler modificare il regex se lavorate con questi file.

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

Dal manuale :h swap:

Si può vedere il nome del file di swap corrente utilizzato con il comando: :sw[apname]

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

se vi viene chiesto, premete D per cancellare il file di swap del file corrente.

se non lo fate, dovete farlo manualmente.

un modo alternativo per farlo è:

per localizzare/ricercare il file:

find | grep ".searchRefineVertTabs.jsp.swp"

e poi cancellare questo file:

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

È possibile utilizzare,

rm -f .<filename>.<ext>.swp
``` ```
rm -f .rc.local.swp

Esempio:

&001