Al editar el código fuente usando gvim (v.7.4.488), quiero confirmar algunos cambios en los vcs (estoy usando git 2.1.4 desde la línea de comandos en Ubuntu Linux).
git --status
muestra qué archivos cambié. Sin embargo, también muestra el vim .*.swp
de los búferes visibles actualmente (tanto si el archivo contiene cambios no guardados como cuando el archivo editado es el mismo que el .*.swp
archivo). Por supuesto, git puede ignorar estos archivos o vim puede almacenar los archivos de intercambio en una ubicación diferente (vea vim.wikia o esta pregunta en stackoverflow ). Pero me gustan los .*.swp
archivos que aparecen git --status
cuando contienen cambios no guardados, ya que me indica que estoy confirmando archivos en un estado diferente al que creo que están.
¿Cómo puedo evitar los falsos positivos de los .*.swp
archivos que aparecen git --status
cuando el archivo guardado es el mismo que el .*.swp
archivo, mientras puedo ver que el archivo para confirmar está en un estado diferente al que estoy editando con vim?
- ¿Es posible tener solo
.*.swp
archivos, cuando el archivo en el disco y el archivo en vim son diferentes? - ¿Hay alguna otra forma de detectar archivos no guardados?
La combinación de los comentarios de @elyashiv y @VanLaser resulta en un método más simple que detectar si los archivos de intercambio implican archivos no guardados:
- no dejes que git ignore los archivos. *. sw [po];
- cuando se compromete, si
git --status
revela cualquier.*.sw[po]
archivo, haga un:wa
en vi; y, - agregar y comprometer.
:wa
para asegurarse de que no haya archivos no guardados.git commit
...Respuestas:
vim -r
en la línea de comando enumerará todos los archivos de intercambio en el directorio actual y los directorios temporales, y si contienen cambios no guardados. Busque la línea que dicemodified: no/YES
.No sé cómo decirle a Vim que busque en un directorio diferente, por lo que deberá cambiar a cada directorio que contenga un archivo de intercambio y ejecutarlo
vim -r
. Puede crear un script que analice la salida degit status
, o se usefind -name '.*.sw[po]'
, y luego se ejecutevim -r
en cada directorio, para mostrar todos los archivos de intercambio con cambios no guardados.(Yo uso en
.*.sw[po]
lugar de.*.swp
, porque a veces.swo
se crean archivos además de.swp
archivos, cuando editas un archivo que ya tiene un archivo de intercambio. Los.swn
archivos también se pueden crear si editas un archivo con dos archivos de intercambio existentes, pero no creo Alguna vez he visto uno en la naturaleza. Si eres realmente paranoico, puedes usarlo.*.sw[a-p]
o simplemente.*.sw?
.)Consulte
:help -r
(un poco) más información sobre la-r
opción, o:help recover.txt
para obtener más información sobre recuperación e intercambio de nombres de archivo.fuente
.
el nombre del archivo), por lo que el patrón correcto sería.*.sw[a-p]
(aunque en casos patológicos, en realidad podría llegar hasta el final.foo.saa
). Eso también debería impedir la coincidencia de archivos Flash, ya que dudo que normalmente sean un archivo oculto..
es obligatorio en un shell glob, pero*.swp
funciona como argumento parafind
. Pero el liderazgo.
hace las cosas más simples. ¡Gracias!Si. El fragmento a continuación (adaptado de vimrc de tpope ) deshabilitará el archivo de intercambio para un búfer cuando no se modifica, por lo que los archivos de intercambio solo existen para archivos modificados.
Advertencia : dado que el archivo de intercambio solo existe cuando se modifica el búfer, pierde el uso del archivo de intercambio como bloqueo de aviso. Si el búfer no se modifica, otro Vim puede comenzar a editarlo sin previo aviso de que ya está abierto. Si el segundo Vim se guarda antes de que el primero realice más cambios, no se notarán hasta que el usuario intente guardar o algo active a Vim para verificar si el archivo está modificado.
fuente