49 votos

¿Cómo deshacerse de las advertencias al abrir un archivo con extensión .swp?

¿Cómo puedo deshacerme de las molestas advertencias cuando abro un archivo que tiene un archivo .swp? O, ¿cómo puedo no generar los archivos .swp en absoluto? Ejemplo de advertencia:

E325: ATTENTION
Found a swap file by the name ".notes.swp"
          owned by: james   dated: Fri Dec  3 17:38:07 2010
         file name: ~james/school/se/project-dir/rottencucumber/doc/notes
          modified: no
         user name: james   host name: james-laptop
        process ID: 2251 (still running)
While opening file "notes"
             dated: Fri Dec  3 18:46:10 2010
      NEWER than swap file!

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r notes"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".notes.swp"
    to avoid this message.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

50voto

user664833 Puntos 306

Este mensaje es realmente muy importante si te preocupas por no perder texto que potencialmente no has guardado. Debería no ser considerado molesto, y debe no hacer que se borre apresuradamente el archivo de intercambio o se configure vim para correr sin ella.

Cualquier archivo que se edite con vim tendrá un archivo de intercambio correspondiente mientras editas que vim utiliza para mantener un registro de los cambios. Cuando dejas de editar un archivo, vim descartará automáticamente el archivo de intercambio correspondiente. Por lo tanto, la existencia de un archivo de intercambio, y su intento de escribir por encima del archivo original, debe ser motivo de consideración y acción apropiada.

Los dos escenarios presentados en el mensaje ( E325: ATTENTION Found a swap file ) son en realidad bastante comunes: (1) o bien otro vim programa está editando el mismo archivo que usted está tratando de editar (en realidad podría ser otra persona - en cuyo caso realmente no tendría sentido borrar a ciegas el archivo de intercambio - o podría ser usted en otra ventana de terminal o pestaña), o (2) a anterior vim (la mayoría de las veces esto ocurre cuando se está editando de forma remota, y la sesión de red se interrumpe - en cuyo caso la sesión de vim no fue abandonada normalmente, y el .swp queda atrás; otro ejemplo de este segundo escenario es que hayas cerrado accidentalmente la ventana de terminal o la pestaña que tenía un archivo activo o en segundo plano vim sesión).

Cuando me encuentro con este mensaje lo primero que pienso es si estoy editando este archivo en otra ventana de terminal o pestaña, ya que normalmente opero con varias ventanas de terminal con varias pestañas cada una:

enter image description here

Si me doy cuenta de que estoy editando en otro lugar, y puede volver a ella A continuación, pulso la tecla q clave para (Q)uit esta sesión adicional, y volver a la edición a través de la vim sesión.

A veces, si no estoy del todo seguro, me (Q)uit y luego ejecutar jobs para verificar si estoy ejecutando vim en el mismo terminal; si no aparece nada, ejecuto ps -ef | grep vim para comprobar si estoy ejecutando vim en otro lugar (es decir, en otra ventana de terminal o pestaña). La cuestión es que siempre intento reanudar la edición a través del vim sesión.


Si estoy seguro de que no puedo volver a la sesión de edición original, y todavía se me presentan las siguientes opciones, entonces pulso r a (R)ecover .

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

Pulsando r Verá un mensaje como éste:

Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

Si, por el contrario, ya no me encuentro con esas opciones, porque estoy en el prompt Shell, entonces ejecuto vim con el -r como se indica a continuación:

vim -r notes

El mensaje resultante será similar:

Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

En cualquier caso, pulse ENTER para continuar, y verá su archivo.

Nota: Si Vim tiene dudas sobre lo que ha encontrado, dará un mensaje de error e insertará líneas con "???" en el texto. Si ve un mensaje de error mientras se recupera, busque en el archivo "???" para ver qué es lo que está mal. Es posible que quieras cortar y pegar para obtener el texto que necesitas.

El comentario más común es "faltan líneas". Esto significa que Vim no puede leer el texto del archivo original. Esto puede ocurrir si el sistema se bloqueó y no se guardaron partes del archivo original.

Dicho esto, nunca he visto esos ??? marcas, así que esto debe ser un verdadero raro ocurrencia.


A continuación, guarde (es decir, escriba) el contenido en otro archivo (normalmente sólo añado "2" al final del nombre del archivo original):

:w notes2

A continuación, forzar la salida de este vim sesión:

:q!

A continuación, compara los dos archivos:

diff notes notes2

Si el diff no devuelve nada Esto significa que no hay diferencia, y que es seguro eliminar tanto el archivo de intercambio como el segundo archivo:

rm .notes.swp notes2

En este punto, abra el archivo original y proceda como si nunca hubiera habido un problema:

vim notes

Si el diff devuelve algo Esto significa que el archivo original (a través del archivo de intercambio) tiene cambios que aún no se han guardado.

En este punto, borre el archivo original, y cambie el nombre del segundo archivo por el del original, o simplemente hágalo en uno mover comando:

mv notes2 notes
overwrite notes? (y/n [n]) y

... y luego eliminar el archivo de intercambio:

rm .notes.swp
remove .notes.swp? y

O bien, haga los dos últimos pasos en un orden ligeramente diferente, eliminando primero el archivo de intercambio y el archivo original:

rm .notes.swp notes
remove .notes.swp? y
remove notes? y

... y luego renombrar el segundo archivo como el original:

mv notes2 notes

En este punto, abra el archivo original y proceda como si nunca hubiera habido un problema:

vim notes

Esto parece mucho trabajo, pero una vez que te acostumbras al flujo de trabajo te lleva como 20 segundos máximo.

3 votos

No puedo creer que esta no sea la respuesta aceptada. Es perfecta. +1

1 votos

No siempre el mensaje es útil. Si estoy editando un archivo, me importa si el archivo tiene cambiado desde que empecé a editar , en el en el momento en que intento guardarlo no si también lo estoy editando en otra ventana de vim. Para mí está perfectamente bien abrir un archivo en dos terminales, siempre y cuando los guardados en el archivo no se intercalen. Vim sólo necesita avisarme cuando intento guardar, no cuando lo abro.

0 votos

Por desgracia, esto no responde a la pregunta, sólo dice que no debo ignorar la pantalla de aviso. Mi situación es que ya tengo el archivo abierto en Vim (para editarlo, tal vez), quiero ver diferentes partes del archivo al mismo tiempo una al lado de la otra, y no quiero buffers divididos porque clang_complete sigue cambiando el tamaño de los buffers. En este caso, en realidad quiero saber cómo abrir un archivo de sólo lectura en Vim y hacer que ignore el archivo de intercambio.

19voto

Patrick Klug Puntos 5320

El mensaje pegado sugiere que todavía tienes el archivo "notas" abierto en otra sesión de Vim. Definitivamente no es una buena idea editar un archivo que está siendo editado en otro lugar.

Si ese mensaje es erróneo, debe determinar cómo salió su sesión de Vim de forma incorrecta y evitarlo en el futuro.

En cuanto a la recuperación, puede ser un problema en este caso, ya que "notes" es más reciente que el archivo Vim .swp asociado a él, pero aún puede intentarlo. Sólo asegúrese de copiar su archivo "notes" a una ubicación de respaldo primero.

Sería conveniente que leyera " :help recover.txt ".

La lección aquí es que se supone que no debes ver este mensaje, y que significa que algo salió mal en alguna parte. Es (probablemente) no la culpa de Vim.

Si a estas alturas sigues absolutamente decidido a no dejar que Vim cree archivos .swp para poder recuperarte de los cuelgues y otros problemas relacionados, puedes poner " set noswapfile " en ~/.vimrc .

1 votos

¡TENGA CUIDADO! Casi pierdo todo mi trabajo jugando con VIM. Copie su código antes de intentar cualquier cosa.

0 votos

Sugiero encarecidamente a los lectores que revisen la respuesta del usuario664833 ( Este mensaje es realmente muy importante... ) ya que creo que da mucha mejor información y consejos que esta respuesta imho

11voto

Brad Parks Puntos 233

Puede utilizar -n para abrir vim sin usar un archivo de intercambio :

Para hacer esto todo el tiempo, sólo hay que poner

alias vim='vim -n' 

en su archivo .bashrc o .bash_aliases

si alguna vez necesitas ejecutar vim sin la opción -n, simplemente ejecuta

\vim

3 votos

Yo no recomendaría correr siempre sin un archivo de intercambio, pero "-n" es en realidad precisamente lo que necesitaba. Normalmente uso un archivo de intercambio. Sin embargo, cuando uso Vim como herramienta de diferencias, me gustaría poder ver las diferencias de los archivos que estoy editando sin que esas diferencias me den este mensaje o interfieran con mi archivo de intercambio.

1 votos

Me gusta esta respuesta: es corta, precisa y responde a la pregunta real.

2voto

vim eliminará el archivo .swp generado cuando salga de él correctamente.

-1voto

He resuelto este problema en tres sencillos pasos:

1:) Ejecute "ls -la" donde existe el archivo para que pueda ver el archivo .swp del mismo.

2:) Ahora "rm -i *.swp" es decir, eliminar el archivo ".swp" del directorio .

3:) Ahora confirme si el archivo ".swp" ha sido eliminado.

4:) Ahora disfruta de esas advertencias.

3 votos

¿Por qué demonios sugieres rm -rf para eliminar un archivo? He sustituido -rf con una más sensata -i

0 votos

No estoy seguro de estar de acuerdo con todos los downvotes; esta es una buena respuesta de "último recurso" y responde directamente a la pregunta formulada. Pero SÓLO cuando se tiene la certeza de que no se está ejecutando ningún proceso de vim.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: