Edite el archivo en el lugar sin modificar los finales de línea

Edite el archivo en el lugar sin modificar los finales de línea

Necesito modificar las fuentes bajo el control de versiones de Git. Las fuentes son archivos de proyecto de Visual Studio, lo que los convierte en nativos de Microsoft. Yo quieroevitarProblemas de espacios en blanco, incluidos juegos de final de línea.

Miré los archivos antes de la modificación en emacs, y el^Mclaramente no estaba presente.

Luego ejecuté lo siguiente desde un script desde una máquina Linux:

sed -i 's/odbc32.lib //g' *.vcproj
sed -i 's/odbccp32.lib //g' *.vcproj

Cuando miro los cambios:

$ git diff cryptest.vcproj
diff --git a/cryptest.vcproj b/cryptest.vcproj
index cec447d..9ae71ea 100644
--- a/cryptest.vcproj
+++ b/cryptest.vcproj
@@ -76,7 +76,7 @@
...
Name="VCLinkerTool"
-        AdditionalDependencies="odbc32.lib odbccp32.lib Ws2_32.lib"
+        AdditionalDependencies="Ws2_32.lib"^M
        SuppressStartupBanner="true"
...

¿Cómo realizo un reemplazo sin agregar espacios en blanco superfluos?

Respuesta1

Hoy en día, emacs detectará automáticamente los finales de línea utilizados en un archivo y, por lo tanto , no verá si un archivo tiene finales de línea \no . Cualquier edición en emacs preservará e imitará los finales de línea.\r\r\n

Para ver realmente qué tiene el archivo, puede probar cat -vetque muestra caracteres de control que incluyen ^Mtabulaciones ( ^I) y el final de línea ( $).

Tenga en cuenta que gitse puede configurar para convertir automáticamente \r\no \nviceversa al mover archivos de texto entre el directorio de trabajo y la base de datos de objetos. Mira estoartículoy estoartículopara verificar cómo está configurado su git, globalmente y por repositorio y cómo puede cambiarlo.

Es difícil ver cómo sedse podría haber introducido el \r. Supongo que estás en un sistema Unix.


En la parte superior de su directorio de trabajo verifique que los siguientes comandos no muestren nada:

git config core.eol
git config core.autocrlf
find . -name .gitattributes -o -name attributes

Ejecute el archivo original sin editar cat -vety verifique si todas, algunas o ninguna de las líneas terminan con los 3 caracteres ^M$.

información relacionada