Este mensaje es bastante importante si le importa no perder el texto que potencialmente no ha guardado. Debería no ser considerado molesto, y debe no hacer que se elimine toda prisa el archivo de intercambio o configurar vim
para funcionar sin ella.
Cualquier archivo con el que edite vim
tendrá un archivo de intercambio correspondiente mientras edita , que se vim
utiliza para realizar un seguimiento de los cambios. Cuando deje 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 sobre el archivo original deben 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 está tratando de editar (en realidad podría ser otra persona, en cuyo caso realmente no tendría sentido simplemente eliminar ciegamente el archivo de intercambio, o podría ser usted en otra ventana o pestaña de terminal), o (2) una vim
sesión anterior se bloqueó (la mayoría de las veces esto ocurre cuando está editando de forma remota, y la sesión de red se corta) en la que caso de que la sesión vim no salga normalmente y el .swp
archivo se quede atrás; otro ejemplo de este segundo escenario es que accidentalmente cerró la ventana o pestaña del terminal que tuvo una vim
sesión activa o en segundo plano ).
Cuando encuentro este mensaje, primero pienso si estoy editando este archivo en otra ventana o pestaña de terminal, ya que normalmente opero con varias ventanas de terminal con varias pestañas cada una:
Si me doy cuenta de que estoy editando en otro lugar y puedo volver a él , entonces presiono la q
tecla para (Q)uit
esta sesión adicional y vuelvo a editar a través de la vim
sesión original .
A veces, si no estoy completamente seguro, (Q)uit
corro jobs
para verificar si estoy corriendo vim
exactamente en el mismo terminal; si no aparece nada, corro ps -ef | grep vim
para verificar si estoy ejecutando en vim
otro lugar (es decir, en otra ventana o pestaña de terminal). El punto es que siempre trato de reanudar la edición a través de la vim
sesión original .
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 presiono r
para (R)ecover
.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Al presionar r
, verá un mensaje como este:
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 otro lado, ya no me enfrento a esas opciones, porque estoy en el indicador de comandos de la shell, entonces ejecuto vim
con la -r
opción, de la siguiente manera:
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
De cualquier manera, presione ENTER
para continuar y verá su archivo.
Nota: Si Vim tiene dudas sobre lo que encontró, mostrará 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é pasa Es posible que desee cortar y pegar para obtener el texto que necesita.
La observación más común es "??? LINES MISSING". Esto significa que Vim no puede leer el texto del archivo original. Esto puede suceder si el sistema se bloquea y no se guardan partes del archivo original.
Dicho esto, nunca he visto esas ???
marcas, por lo que esto debe ser un hecho realmente raro .
A continuación, guarde (es decir, escriba) el contenido en otro archivo (generalmente solo agrego "2" al final del nombre del archivo original):
:w notes2
A continuación, cierre forzosamente esta vim
sesión:
:q!
A continuación, compare los dos archivos:
diff notes notes2
Si diff
no devuelve nada , eso significa que no hay diferencia, y 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 diff
devuelve algo , eso significa que el archivo original (a través del archivo de intercambio) tuvo cambios que, gracias a la recuperación, se guardaron en el segundo archivo.
Dado que esos cambios se capturan en el segundo archivo, puede eliminar el archivo de intercambio y sobrescribir el archivo original con el segundo:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
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, toma como 20 segundos como máximo.
vim -n file_name
El mensaje pegado sugiere que todavía tiene abierto el archivo "notas" en otra sesión de Vim. Definitivamente no es una buena idea editar un archivo que se está editando en otro lugar.
Si ese mensaje es incorrecto, debe determinar cómo su sesión de Vim salió incorrectamente y evitarlo en el futuro.
En cuanto a la recuperación, puede ser un problema en este caso, ya que las "notas" son más nuevas que el archivo Vim .swp asociado, pero aún puede intentarlo. Solo asegúrese de copiar primero el archivo de "notas" en una ubicación de respaldo.
Sería una buena idea leer "
:help recover.txt
".La lección aquí es que se supone que no debes estar viendo este mensaje, y que estás diciendo que algo salió mal en alguna parte. (Probablemente) no es culpa de Vim.
Si en este punto todavía está absolutamente decidido a no permitir que Vim cree archivos .swp para poder recuperarse de bloqueos y otros problemas relacionados, puede poner "
set noswapfile
" en~/.vimrc
.fuente
Puede usar -n para abrir vim sin usar un archivo de intercambio :
Para hacer esto todo el tiempo, solo pon
en su archivo .bashrc o .bash_aliases
si alguna vez necesita ejecutar vim sin la opción -n, simplemente ejecute
fuente
vim eliminará el archivo .swp generado cuando salga correctamente.
fuente
Use la opción de mensaje corto en su
~/.vimrc
:Que también es el valor predeterminado cuando se ejecuta el modo POSIX.
Sin embargo, no haga esto : es como quitar las bolsas de aire de su automóvil para aumentar la eficiencia del combustible. A la larga, pasarás más tiempo recuperándote de lo que respondiste la pregunta.
fuente
:e
para ver lo que ha pasado (incluyendo una rápidau
a deshacer de nuevo a lo Tenía en el búfer.) Me gusta mucho más que ser molestado por tener un archivo abierto.Esto me sucedió cuando mi terminal cerró inesperadamente mi conexión con vi open.
Afortunadamente no tuve cambios perdidos.
process ID: 2251 (still running)
, en este caso es 2251ps 2251
kill 2251
Y eso es.
Recuerde que los archivos de intercambio están ahí para protegerlo, y no debe deshabilitarlos por completo.
fuente
vi(m)
proceso?He resuelto este problema en tres simples pasos:
1 :) Ejecute "ls -la" donde existe el archivo para que pueda ver el archivo .swp para el mismo.
2 :) Ahora "rm -i * .swp", es decir, elimine el archivo ".swp" del directorio.
3 :) Ahora confirme si el archivo ".swp" se ha eliminado.
4 :) Ahora disfruta de esas advertencias.
fuente
rm -rf
eliminar un archivo? Lo reemplacé-rf
por uno más sensato-i