Eliminar los ^M parece algo muy tonto, pero en su día me supuso un pequeño quebradero de cabeza.
Algunos documentos en formatos de Windows están llenos de ^M o tienen dos saltos de línea. Al intentar sustituirlos con Vim te puedes volver loco si no sabes un pequeño truco y es que debes poner ^M sin usar la tecla ^ y la tecla M, debes hacerlo pulsando Ctrl+V y Ctrl+M. La diferencia se ve clara, porque el ^M sale en otro color que el texto, (con el esquema de colores wombat, aparece en azul).
Por ejemplo, para eliminar todos los ^M de un documento, se puede usar:
:%s/^M$//g
Y para cambiar dos saltos de línea por uno, esto:
:%s/\n\n/^M/gc
Si no te funciona usando Ctrl+V y Ctrl+M, puedes probar usando secuencias de escapa para el carácter ASCII 13 (retorno de carro), así:
:%s/\n\{2,}/\r/gc
O modificando el archivo directamente con sed:
sed -i.bak ‘:a;N;$!ba;s/\n\n/\n^M/g’ archivo_a_modificar.txt
Juan Ramiro Gonzalez Rojas
Excelente aporte directo y solucion al problema .
Jesuo
En MacOS no funciona.
Jesús
Ni en Ubuntu 24.10.
Uan
Si no te funciona:
– Puede ser que no tengáis instalado vim, sino vi, al que le faltan algunas secuencias de escape, se puede comprobar con:
vim –version o vi –version
En Ubuntu podría instalarse con:
apt install vim
– La combinación Ctrl+V Ctrl+M inserta un carácter de retorno de carro (^M, que es el carácter ASCII 13), algunas configuraciones predeterminadas o personalizadas del editor pueden afectar la forma en que se interpretan las combinaciones de teclas y los caracteres de control. Por ejemplo, la opción compatible en vim puede alterar el comportamiento del editor para hacerlo más similar a vi, lo que podría deshabilitar ciertas funcionalidades avanzadas. Puedes verificar y ajustar esta configuración en tu archivo .vimrc o mediante el comando :set compatible? dentro de vim.
Si es alguna de estas cosas, se pueden usar secuencias de escape, en vez de Ctrl+V Ctrl+M.
Esto debería funcionar igual:
:%s/\n\{2,}/\r/gc
Otra opción podría ser modificar el archivo sin editarlo para cambiar el ^M por dos saltos de línea usando sed, por ejemplo, si quieres modificar wp-config.php (funciona con cualquier archivo de texto):
sed -i.bak ‘:a;N;$!ba;s/\n\n/\n^M/g’ wp-config.php
El .bak del comando crea una copia, por si acaso, si no quieres copia de seguridad quita el .bak