vim line-breaks

¿Cómo convertir el linebreak ^ M al linebreak ''normal'' en un archivo abierto en vim?



line-breaks (30)

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

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


Mando

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

Donde <Ctrl-V><Ctrl-M> significa que presiona Ctrl + V y luego Ctrl + M.

Explicación

:%s

sustituto,% = todas las líneas

<Ctrl-V><Ctrl-M>

^ M caracteres (el 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 linea ( /r )

g

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


"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()


¡Simplemente elimina el set binary en tu .vimrc!


¿Qué tal 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 ^M y eso es todo.


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


Dentro de vim , mire el formato de archivo - DOS o Unix:

:set filetype=unix

:set fileformat=unix

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


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 es probable que desee utilizar ^Q lugar de ^V , ya que, de forma predeterminada, ^V se asigna para pegar texto.


En mi caso,

Nada de arriba funcionó, tuve un archivo CSV copiado a la máquina de Linux desde mi mac y usé todos los comandos anteriores, pero nada ayudó, excepto el de abajo.

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

Tuve un archivo en el que ^ M caracteres fueron sandwitched entre líneas algo como abajo

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



Esto funcionó para mí:

  1. Establecer formato de archivo a unix ( /n finalización de línea)
  2. guarda el archivo

Así que en vim:

:set ff=unix :w


Esto funcionó para mí:

:% s//r/n//r


Hay muchas otras respuestas a esta pregunta, pero aún así, lo siguiente funciona 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 finales de dos líneas.
  • Ejecute :w ++ff=unix para escribir el archivo utilizando los finales de línea de unix
  • Dejar de fumar

He pasado una tarde luchando con / n ctrl-v 012 (ambos me proporcionan null). Y trabajé a través de este hilo hasta que llegué a metagrapher.

/r bien para mí!

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

se volvió 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)

Mágico. Estoy profundamente agradecido


Hice esto con sed:

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


Lo simple que me funcionó.

dos2unix filename


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

:%s/.$//g

Y resolvió mi problema


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

tipo :%s/

presione CTRL-V CTRL-M

tipo //g

presiona enter

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

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


O, en lugar de usar vim, puede corregir los saltos de línea con este comando

fromdos <filename.txt>

¡Espero eso ayude!


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

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


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

Supongo que podría ser unix , entonces el problema es que su archivo se creó con fileformat=dos agregando "^ M ^ J" al final de la línea, pero se leyó con flieformat=unix solo eliminando "^ J" del final de la línea, dejando el "^ M" allí.

Solo ingrese :e ++ff=dos en la línea de comandos 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.


Sé que esto puede ser demasiado viejo, pero espero que alguien pueda encontrarlo útil.

Utilice uno de estos comandos:

:%s//r//g

O

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


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


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. La siguiente cadena de reemplazo solucionó 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 una nueva para que se muestre correctamente. Me interesaría saber la mecánica subyacente de por qué esto funciona.


^ M es recuperado por Ctrl + V y M , así que

s/^M//g


para hacer coincidir el carácter ^ M, tuve que seleccionarlo visualmente y luego usar el comando Copiar en el Portapapeles del sistema operativo para recuperarlo. Puedes probarlo haciendo una búsqueda del personaje antes de probar el comando de reemplazo.

/^M

debe seleccionar la primera línea mala

:%s/^M//r/g

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

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

EDITAR:

Tengo 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 ff a unix, mac o dos no hizo otra cosa 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 tener :%s//r$//g pero eso habría eliminado los retornos de carro 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 hace tiempo que fue respondida, pero parecía haber cierta confusión en marcha y pensé que ayudaría a aclarar algo de eso ya que esto está subiendo mucho en las búsquedas de Google.


use la utilidad dos2unix si el archivo fue creado en windows, use la utilidad mac2unix si el archivo fue creado en mac. :)


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

sed ''s//r//g''


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

Así que la solución para mí fue:

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

Donde <Ctrl-V><Ctrl-Enter> significa mantener presionado Ctrl , presionar y soltar V , presionar y soltar la tecla Intro , 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 una /r invisible después de la ^M

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

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

Donde % significa "en este búfer", s significa "sustituir", / significa "(buscar) el siguiente patrón", <Ctrl-V><Ctrl-Enter> refiere a las teclas que se deben presionar para obtener el carácter ^M (consulte 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.


:g/^M/s// /g

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

Necesitas escribir ctrl+v ctrl+m .


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

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