Usuario del software
2012-09-27 14:47:47 +0000 2012-09-27 14:47:47 +0000
89

¿Cuál es la forma más fácil de borrar los archivos de intercambio de Vim de los que ya me he recuperado?

A veces Vim se cuelga y me deja un archivo de intercambio. Eso es genial. Luego abro el archivo que estaba editando y Vim me pregunta si quiero recuperarlo. Lo hago, gracias. Cuando termina, Vim me dice,

You may want to delete the .swp file now.

Por qué, sí, lo hago. ¿Cómo lo hago? Pensé que empezaría a usar el viejo archivo de intercambio como un archivo de intercambio de nuevo y lo limpiaría cuando lo dejara, pero eso no es cierto. Hace uno nuevo, lo limpia, y cuando abro el archivo de nuevo me pide que me recupere del primero.

Seguro que me falta algo.

Respuestas [12]

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

Una forma un poco más simple:

Desde el emulador de terminal:

vim filename

...y elige recuperar, y si quieres borrar el intercambio, escribe _ (guardar) y luego hazlo desde dentro de vim:

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

...y elige borrar esta vez.

Acabo de enterarme de esto, y creo que lo haré a partir de ahora. Entonces tampoco sobrescribiré accidentalmente un archivo de trabajo, si la recuperación resultó ser corrupta (aunque nunca lo he intentado antes).

También hay consejos relevantes sobre esta pregunta sobre el desbordamiento de la pila (donde encontré este consejo).

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

Para limpiar TODOS los archivos de vim Swap en un directorio:

Si estás seguro de que no necesitas ningún archivo de vim swap en un árbol de directorios y quieres deshacerte de ellos, puedes usar el siguiente comando en el directorio mientras vim no esté funcionando (ni siquiera en otra ventana o incluso en una sesión de inicio de sesión diferente):

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

Algunos de la inspiración y los pensamientos vinieron de Eliminar la basura . swp en Google Groups.  Esto eliminará todos los archivos cuyos nombres terminen en .swk, .swl, .swm, .swn, .swo, o .swp en el árbol de directorios actual.

Esto podría no ser lo que quieres, por varias razones:

  • Como se ha dicho, busca en el directorio actual árbol ; es decir.., el directorio actual y todos los subdirectorios, recursivamente.  Eso va más allá de lo que la pregunta pide, y puede ser considerado como una exageración.
  • Como se ha dicho, borrará todos los archivos cuyos nombres terminen en .swk, .swl, .swm, .swn, .swo, o .swp, y no sólo .swp. &nbsp Gary Johnson dice ,

  • Por otro lado, podría ser underkill.&nbsp rublo sugiere

  • Podría ser overkill.   Como se ha dicho, eliminará todos los archivos cuyos nombres terminen en .swk, .swl, .swm, .swn, .swo, o .swp.  Pero, al parecer, los archivos de intercambio de vim suelen ser archivos "punto".  Si edita hello.cpp, el archivo de intercambio podría ser .hello.cpp.swp.  Como se muestra (pero no se explica) en respuesta de rublo , es más seguro eliminar sólo los archivos cuyos nombres empiecen por un punto; por ejemplo con

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

Escriba ls -a que lista TODOS los archivos del directorio

escriba rm .whatever.your.swp es y presione enter

Es así de simple.

Cualquier archivo que se muestre con . al frente es un archivo oculto y normalmente no se ve.

Recuerde que los cambios son inmediatos y permanentes así que tenga cuidado.

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

Por cierto, algunos plugins lo hacen automáticamente para ti: autoswap.vim

a partir de la descripción:

  1. ¿El archivo ya está abierto en otra sesión de Vim en alguna otra ventana?
  2. Si es así, cambia a la ventana donde estamos editando ese archivo.
  3. Si el archivo de intercambio es más antiguo que el propio archivo, deshazte de él.
  4. De lo contrario, abra el archivo de sólo lectura para que podamos echarle un vistazo y podamos guardarlo.
7
6
2012-09-27 15:00:27 +0000

No, AFAIK no te falta nada. Vim sigue manteniendo el archivo de intercambio como copia de seguridad hasta que lo elimines explícitamente.

Simplemente guarda y abandona y vuelve a abrir el mismo archivo de nuevo. Se le pedirá (de nuevo) con

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

Ahora solo presione d :)

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

Vim, como la mayoría de los comandos de Unix, es simple y explícito, en lugar de asumir e implícito.

Te recuperas con (r). Si no te gusta la recuperación o la recuperación está corrupta, puedes descartarla. Si te gusta, puedes guardar el archivo. El archivo de recuperación no se borra para ti porque no es explícito y no será correcto para el 100% de las situaciones.

Así que (r)ecover, (w)rite y (q)uit, entonces o bien edita de nuevo y elige (d)elete o "rm .myfile.js.swp" y edita de nuevo. Esto es rápido de hacer y siempre es, desde el punto de vista de Vim, un comportamiento 100% correcto.

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

Aquí hay un recorte para añadir en .vimrc. Borra todos los archivos de intercambio asociados al buffer de archivos actual y restablece la extensión de intercambio.

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

Una vez que uno se encuentra en el aprieto, puede ejecutar :DeleteFileSwaps Esto es genial si se combina con los comandos :windo o :tabdo.

:tabdo DeleteFileSwaps

Más detalles : Un archivo puede tener más de 1 archivo de intercambio. La razón es que el archivo de intercambio, con la extensión .swp, todavía existe y vim seguirá creando nuevos por ello. Para saber si .swp existe:

  • Con el archivo de destino abierto en vim, ejecute :sw para obtener el archivo swap actual.
  • Compruebe el directorio en el que se encuentra el archivo swap actual.
  • A continuación, compruebe si el directorio contiene un archivo swap con el nombre del archivo abierto y tiene una extensión de .swp.

El fragmento anterior sigue el mismo proceso, pero elimina todos los archivos swap.

Espero que esto ayude.

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

Estos archivos eran molestos para mí también, pero puse la opción en .vimrc - set noswapfile para evitar que vim lo creara y, en cambio, mantener los archivos en la memoria.

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

Aquí hay un regex más completo para limpiar todos los archivos de intercambio de vim basado en el propio archivo gitignore de Github para Vim

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

Tenga cuidado, aunque esta es una solución más completa, sacará cualquier archivo de imagen .svg y archivos flash .swf de adobe. Puede que quieras modificar el regex si trabajas con esos archivos.

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

En el manual :h swap:

Puedes ver el nombre del archivo swap actual que se está usando con el comando: :sw[apname]

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

si se te pide entonces presiona D para borrar el archivo actual de intercambio.

si no es así entonces tienes que hacerlo manualmente.

una forma alternativa de hacerlo es:

para localizar/buscar el archivo:

find | grep ".searchRefineVertTabs.jsp.swp"

y luego borrar este archivo:

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

Puedes usar,

rm -f ...swp

Ejemplo:

rm -f .rc.local.swp
-1