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

Responder a Uan Cancelar la respuesta

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