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

StackOverflow https://stackoverflow.com/questions/811193

  •  03-07-2019
  •  | 
  •  

Pregunta

vim se muestra en cada línea que termina ^ M

¿Cómo hago para reemplazar esto con un salto de línea 'normal'?

¿Fue útil?

Solución

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

  

: e ++ ff = dos

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

Otros consejos

Comando

:%s/<Ctrl-V><Ctrl-M>/\r/g

Donde <Ctrl-V><Ctrl-M> significa escribir Ctrl + V luego Ctrl + M .

Explicación

:%s

sustituto,% = todas las líneas

<Ctrl-V><Ctrl-M>

^ 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, dando como resultado el carácter especial ^ M)

/\r/

con nueva línea (\r)

g

Y hágalo globalmente (no solo la primera aparición en la línea).

En Linux y Mac OS, los siguientes trabajos,

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

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

Nota: en Windows probablemente desee utilizar ^Q en lugar de ^V, ya que de forma predeterminada <=> está asignado para pegar texto.

Dentro de vim, mire el formato de archivo & # 8212; DOS o Unix:

:set filetype=unix

:set fileformat=unix

El archivo se volverá a 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 ^M retornos de línea en 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 carácter, pero supongo que Vim solo necesita obtener un nuevo \ r para mostrarse correctamente. Me interesaría saber la mecánica subyacente de por qué esto funciona.

Primero, use :set ff? para determinar el formato de archivo que es su archivo.

Supongo que podría ser unix, entonces el problema es que su archivo fue creado con fileformat=dos agregando " ^ M ^ J " hasta el final de la línea, pero lea con flieformat=unix solo eliminando " ^ J " desde el final de la línea, dejando el " ^ M " ahí.

Simplemente 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 que el carácter ^ M coincida, tuve que seleccionarlo visualmente y luego usar el comando Copiar del SO al portapapeles para recuperarlo. Puedes probarlo haciendo una búsqueda del personaje antes de probar el comando reemplazar.

/^M

debería seleccionar la primera línea incorrecta

:%s/^M/\r/g

reemplazará todos los ^ M errantes con retornos de carro.

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

EDIT:

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 ^ M a ^ J y viceversa.

La solución en este caso:

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

La razón por la que tomé esta ruta es porque quería asegurarme de que no estaba siendo destructivo con mi archivo. Podría haber :%s/\r$//g pero eso habría eliminado los retornos de carro de inmediato, 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 revivir una vieja pregunta que ha sido respondida desde hace mucho tiempo, pero parecía haber cierta confusión y pensé que podría ayudar a aclarar algo de eso, ya que esto está en lo más alto en las búsquedas de Google.

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

tipo :%s/

presione CTRL-VCTRL-M

tipo //g

presione Enter

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

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

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

Algo simple que funcionó para mí

dos2unix   filename

Hice esto con sed:

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

^ M es recuperado por Ctrl + V y M , también lo hace

s/^M//g

¿Qué pasa con solo: :%s/\r//g Eso funcionó totalmente para mí.

Lo que esto hace es simplemente limpiar el final de la línea de todas las líneas, elimina el ^ M y listo.

Ctrl + M minimiza mi ventana, pero Ctrl + Enter en realidad inserta un carácter ^M. También tenía que asegurarme de no levantar la tecla Ctrl entre pulsaciones.

Entonces la solución para mí fue:

:%s/<Ctrl-V><Ctrl-Enter>/\r/g

Donde <Ctrl-V><Ctrl-Enter> significa presionar y mantener Ctrl , presionar y soltar V , presionar y soltar Enter , y luego suelte 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 del %.

Para evitar esto, desea eliminar los caracteres s sin reemplazarlos.

:%s/<Ctrl-V><Ctrl-Enter>//g

Donde / significa " en este búfer, " // significa " sustituto, " g significa " (encontrar) el siguiente patrón, " <=> se refiere a las teclas a presionar para obtener el carácter <=> (ver arriba), <=> significa " sin nada " (o " con el patrón entre estas dos barras, que está vacío "), y <=> es una bandera que significa " globalmente, quot; a diferencia de la primera aparición en una línea.

Hay muchas otras respuestas a esta pregunta, pero aún así, las siguientes funcionan mejor para mí, ya que necesitaba una solución de línea de comandos:

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

Explicación:

  • Sin cargar ningún archivo .vimrc, abra myfile
  • Ejecute :e ++ff=dos para forzar una recarga de todo el archivo como terminaciones de dos líneas.
  • Ejecute :w ++ff=unix para escribir el archivo utilizando terminaciones de línea unix
  • Salir de vim

Esto funcionó para mí:

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

Entonces en vim:

:set ff=unix
:w

En mi caso,

Nada de lo anterior funcionó, tenía un archivo CSV copiado a la máquina Linux desde mi mac y usé todos los comandos anteriores pero nada ayudó excepto el siguiente

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

Tenía un archivo en el que los caracteres ^ M estaban interceptados entre líneas, algo así como debajo

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 Windows, puede descargarlos de 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

use la utilidad dos2unix si el archivo se creó en Windows, use la utilidad mac2unix si el archivo se creó en mac. :)

Esto funcionó para mí:

:% s/\r\n/\r

Para guardar 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, tírelo y péguelo en una línea como esta en su .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>

Ninguna de estas sugerencias me funcionó, ya que logré obtener una carga de ^M saltos de línea mientras trabajaba con vim y eclipse. Sospecho que encontré un caso externo, pero en caso de que ayude a alguien que lo hice.

:%s/.$//g

Y resolvió mi problema

:g/^M/s// /g

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

Debe escribir ctrl+v ctrl+m.

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

sed 's/\r//g'

¡Simplemente elimine set binary en su .vimrc!

Use uno de estos comandos:

:%s/\r//g

O

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

" Esta función conserva 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 proporcionan nulo). & amp; trabajé a través de este hilo hasta que llegué al metagrafo.

\r funcionó bien para mí!

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

resultó 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, puede solucionar los saltos de línea con este comando

fromdos <filename.txt>

¡Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top