Publicado por & archivado en Vim.

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

 

4 Comentarios para “Eliminar los ^M y doble salto de línea con Vim”

  1. 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

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *