¿Cómo convertir el salto de línea ^ M al salto de línea ‘normal’ en un archivo abierto en vim?

vim muestra en cada línea que termina ^ M

¿Cómo hago para reemplazar esto con un linebreak ‘normal’?

Esto es lo único que funcionó para mí:

: e ++ ff = dos

Lo encontré en: http://vim.wikia.com/wiki/File_format

Mando

 :%s//\r/g 

Donde significa que escribe Ctrl + V y luego Ctrl + M.

Explicación

 :%s 

sustituto,% = todas las líneas

  

^ M caracteres (Ctrl-V es una forma Vim de escribir el carácter Ctrl ^ y Ctrl-M escribe la M después de la expresión regular, lo que resulta en ^ M carácter especial)

 /\r/ 

con nueva línea ( \r )

 g 

Y hazlo globalmente (no solo la primera ocurrencia en la línea).

En Linux y Mac OS, los siguientes trabajos,

 :%s/^V^M/^V^M/g 

donde ^V^M significa tipo Ctrl + V , luego Ctrl + M.

Nota: en Windows probablemente desee utilizar ^Q lugar de ^V , ya que de forma predeterminada ^V se asigna para pegar texto.

Dentro de vim , mira el formato de archivo – DOS o Unix:

:set filetype=unix

:set fileformat=unix

El archivo se escribirá sin caracteres de retorno de carro (CR, ^ M).

Un archivo que había creado con BBEdit visto en MacVim mostraba un montón de retornos de línea ^M lugar de los regulares. El siguiente reemplazo de cadena resolvió el problema, espero que esto ayude:

:%s/\r/\r/g

Es interesante porque estoy reemplazando los saltos de línea con el mismo personaje, pero supongo que Vim solo necesita obtener una \ r \ ndetergente para mostrarse correctamente. Me interesaría saber la mecánica subyacente de por qué esto funciona.

Primero, use :set ff? para averiguar el formato de archivo de su archivo.

Supongo que podría ser unix , entonces el problema es que tu archivo fue creado con fileformat=dos agregando “^ M ^ J” al final de la línea, pero leí con flieformat=unix solo quitando el “^ J” del final de la línea, dejando el “^ M” allí.

Solo ingrese :e ++ff=dos en la línea de comando de Vim para cambiar el formato de su archivo de unix a dos. Debería resolver el problema. Si no, :%s/\r//g debería ayudarte.

para hacer coincidir el carácter ^ M, tuve que seleccionarlo visualmente y luego usar el comando OS copy to clipboard para recuperarlo. Puede probarlo haciendo una búsqueda del personaje antes de probar el comando de reemplazo.

 /^M 

debería seleccionar la primera línea mala

 :%s/^M/\r/g 

reemplazará todo el errante ^ M con retornos de carro.

Esto es como funciones en MacVim, que se basa en gvim 7.

EDITAR:

Tener este problema nuevamente en mi máquina con Windows 10, que tiene Ubuntu para Windows, y creo que esto está causando problemas de formato de archivo para vim. En este caso, cambiar el ff a unix, mac o dos no hizo nada más que cambiar el ^ M a ^ J y viceversa.

La solución en este caso:

 :%s/\r$/ /g :%s/ $//g 

El motivo por el que tomé esta ruta es porque quería asegurarme de que no estaba siendo destructivo con mi archivo. Podría tener :%s/\r$//g pero eso hubiera borrado los retornos de carro al instante, y podría haber tenido resultados inesperados. En su lugar, convertimos el carácter CR singular, aquí un carácter ^ M, en un espacio, y luego eliminamos todos los espacios al final de las líneas (lo que para mí es un resultado deseable, independientemente)

Perdón por haber revivido una vieja pregunta que hace mucho tiempo que fue respondida, pero parecía haber cierta confusión en marcha y pensé que ayudaría a despejar algo de eso ya que esto está muy arriba en las búsquedas de Google.

Ninguno de estos funcionó para mí, así que probé esto, que funcionó:

tipo :%s/

presione CTRL-V CTRL-M

tipo //g

presione Entrar

Entonces, el comando general en Vim debería ser :%s/^M//g

Qué hace esto :%s (buscar y reemplazar) /^M/ (ese símbolo) / (sin caracteres) g (globalmente).

Sin necesidad de utilizar Ctrl :%s/\r$//

Lo simple que funcionó para mí

 dos2unix filename 

Hice esto con sed:

sed -i -e 's/\r/\n/g' filename

^ M se recupera con Ctrl + V y M , así que hazlo

 s/^M//g 

¿Qué tal solo:: :%s/\r//g Eso funcionó por completo para mí.

Lo que hace es solo limpiar el final de la línea de todas las líneas, elimina el ^ M y eso es todo.

Ctrl + M minimiza mi ventana, pero Ctrl + Enter realmente inserta un carácter ^M También tuve que asegurarme de no levantar la tecla Ctrl entre las presiones.

Entonces la solución para mí fue:

 :%s//\r/g 

Donde significa mantener presionada la tecla Ctrl , presionar y soltar V , presionar y soltar Enter , y luego soltar Ctrl .

Si está trabajando en un archivo generado por Windows

La solución anterior agregará una línea adicional entre las líneas existentes, porque ya hay un \r invisible después de ^M

Para evitar esto, desea eliminar los caracteres ^M sin reemplazarlos.

 :%s///g 

Donde % significa “en este búfer” s significa “sustituir” / significa “(buscar) el siguiente patrón,” refiere a las teclas para presionar para obtener el carácter ^M (ver arriba), // significa “sin nada” (o, “con el patrón entre estas dos barras, que está vacío”), y g es una bandera que significa “globalmente”, en oposición a la primera aparición en una línea.

Hay muchas otras respuestas a esta pregunta, pero aún así, lo siguiente me funciona mejor, ya que necesitaba una solución de línea de comando:

 vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -cq myfile 

Explicación:

  • Sin cargar ningún archivo .vimrc, abra myfile
  • Ejecutar :e ++ff=dos para forzar una recarga del archivo completo como dos finales de línea.
  • Ejecute :w ++ff=unix para escribir el archivo usando terminaciones de línea Unix
  • Salir de vim

En mi caso,

Nada de lo anterior funcionó, tuve un archivo CSV copiado de mi Mac en mi máquina Linux y utilicé todos los comandos anteriores, pero nada me ayudó, excepto el de abajo.

 tr "\015" "\n" < inputfile > outputfile 

Tenía un archivo en el que los caracteres ^ M estaban intercalados entre líneas, algo así como a continuación

 Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico, 

Alternativamente, hay utilidades de código abierto llamadas dos2unix y unix2dos disponibles que hacen esto mismo. En un sistema Linux, probablemente estén instalados por defecto; para un sistema de Windows, puede descargarlos desde http://www.bastet.com/, entre otros.

 sed s/^M//g file1.txt > file2.txt 

donde ^ M se escribe presionando simultáneamente las 3 teclas, ctrl + v + m

Esto funcionó para mí:

  1. Establecer formato de archivo para unix ( \n final de línea)
  2. guarda el archivo

Entonces en vim:

 :set ff=unix :w 

use la utilidad dos2unix si el archivo fue creado en Windows, use la utilidad mac2unix si el archivo fue creado en mac. 🙂

Esto funcionó para mí:

 :% s/\r\n/\r 

Para guardar las pulsaciones de teclas , puede evitar escribir Ctrl + V Ctrl + M colocando esto en un mapeo. Simplemente abra un archivo que contenga un carácter ^ M, retírelo y péguelo en una línea como esta en su .vimrc:

 nnoremap d :%s/^M//g 

Ninguna de estas sugerencias me ayudó a conseguir un montón de saltos de línea ^M mientras trabajaba con vim y eclipse. Sospecho que encontré un caso externo, pero en caso de que ayude a alguien que hice.

 :%s/.$//g 

Y resolvió mi problema

 :g/^M/s// /g 

Si escribe ^M usando Shift+6 Caps+M , no aceptará.

Necesitas escribir ctrl+v ctrl+m .

Sé que quizás sea demasiado viejo, pero espero que alguien pueda encontrarlo útil.

Use uno de estos comandos:

 :%s/\r//g 

O

 :%s/\r\(\n\)/\1/g 

^M da saltos de línea no deseados. Para manejar esto, podemos usar el comando sed siguiente manera:

 sed 's/\r//g' 

¡Solo elimine set binary en su .vimrc!

“Esta función preserva la lista de saltos

 fun! Dos2unixFunction() let _s=@/ let l = line(".") let c = col(".") try set ff=unix w! "%s/\%x0d$//e catch /E32:/ echo "Sorry, the file is not saved." endtry let @/=_s call cursor(l, c) endfun com! Dos2Unix keepjumps call Dos2unixFunction() 

Pasé una tarde luchando con \ n ctrl-v 012 (los cuales me dan nulo). y trabajé a través de este hilo hasta que alcancé el de metagrapher.

\r funcionó bien para mí!

 /),/s/),/)\r/g 

dio vuelta algo como esto:

blacklist-extra: i386 (0.4.1, 0.4.1 + nmu1), libmount1: i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1: i386 (2.20.1-5.1, 2.20.1-5.2) , libapt-pkg4.12: i386 (0.9.7.4, 0.9.7.5), nmap: i386 (6.00-0.1, 6.00-0.2), libsane-common: i386 (1.0.22-7.3,

en algo como esto:

26 libwv-1.2-4: i386 (1.2.9-3, automático)
27 openjdk-6-jre-headless: i386 (6b24-1.11.4-3, automático)
28 jed: i386 (0.99.19-2.1)

Magia. Estoy profundamente agradecido

O en lugar de usar vim puedes simplemente arreglar los saltos de línea usando este comando

 fromdos  

¡Espero eso ayude!

    Intereting Posts