vim se muestra en cada línea que termina ^ M
¿Cómo hago para reemplazar esto con un salto de línea 'normal'?
vim se muestra en cada línea que termina ^ M
¿Cómo hago para reemplazar esto con un salto de línea 'normal'?
Respuestas:
Esto es lo único que funcionó para mí:
: e ++ ff = dos
Lo encontré en: http://vim.wikia.com/wiki/File_format
:e ++ff=dos
seguido por :set ff=unix
convertirá las terminaciones a un formato cuerdo.
:%s/<Ctrl-V><Ctrl-M>/\r/g
Donde <Ctrl-V><Ctrl-M>
significa tipo Ctrl+ Vluego Ctrl+ M.
:%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).
:%s/<Ctrl-V><Ctrl-M>/\r/g
(donde \ r reemplaza la ^ M con una nueva 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 usar en ^Q
lugar de ^V
, ya que de forma predeterminada ^V
está asignado para pegar texto.
%s/\r/\r/g
funcionó bien en MacVim para un archivo que se muestra solo ^M
al final de las líneas (una línea larga en términos de MacVim). Claramente, \ r significa cosas diferentes en el patrón frente a las partes de reemplazo de este comando.
Dentro vim
, mira 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).
set ff=unix
un pequeño atajo de la misma manera que ft
es un atajo parafiletype
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.
\r
personajes a \n
pesar de especificar \r
como reemplazo. No me quejo, eso es exactamente lo que quería. Solo raro.
Primero, use :set ff?
para averiguar el formato de archivo que tiene su archivo.
Supongo que podría ser unix
, entonces el problema es que su archivo se creó fileformat=dos
agregando "^ M ^ J" al final de la línea, pero se leyó con flieformat=unix
solo quitar la "^ J" del final de la línea, dejando la "^ M" allí.
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.
:e ++ff=dos
entonces :set ff=unix
y:w
para que el carácter ^ M coincida, tuve que seleccionarlo visualmente y luego usar el comando Copiar del SO al portapapeles para recuperarlo. Puede probarlo haciendo una búsqueda del personaje antes de probar el comando reemplazar.
/^M
debe 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.
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 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 haberlo hecho, :%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 de las búsquedas de Google.
Ninguno de estos funcionó para mí, así que probé esto, que funcionó:
tipo :%s/
prensa CTRL-VCTRL-M
tipo //g
prensa Enter
Entonces el comando general en Vim debería verse como :%s/^M//g
Lo que esto hace: :%s
(buscar y reemplazar) /^M/
(ese símbolo) /
(sin caracteres) g
(globalmente).
^ M es recuperado por Ctrl+ Vy M, también
s/^M//g
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
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
pero no para BSD sed
entonces (como se encuentra en OSX). Cualquiera que arregle saltos de línea probablemente esté trabajando con una combinación de sistemas operativos, por lo que es útil tener claro cuándo funcionará la respuesta.
¿Qué pasa con
:%s/\r//g
eso ?
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.
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:
myfile
:e ++ff=dos
para forzar una recarga de todo el archivo como terminaciones de dos líneas.:w ++ff=unix
para escribir el archivo usando terminaciones de línea unixCtrl+ Mminimiza mi ventana, pero Ctrl+ Enterrealmente inserta un ^M
carácter. También tenía que asegurarme de no levantar la Ctrltecla entre pulsaciones.
Entonces la solución para mí fue:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Donde <Ctrl-V><Ctrl-Enter>
significa mantener Ctrl presionado, presionar y soltar V, presionar y soltar Enter, y luego soltar Ctrl .
La solución anterior agregará una línea adicional entre las líneas existentes, porque ya hay un invisible \r
después de ^M
.
Para evitar esto, desea eliminar los ^M
caracteres sin reemplazarlos.
:%s/<Ctrl-V><Ctrl-Enter>//g
Donde %
significa "en este búfer", s
significa "sustituto", /
significa "(buscar) el siguiente patrón", se <Ctrl-V><Ctrl-Enter>
refiere a las teclas para presionar para obtener el ^M
carácter (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.
Esto funcionó para mí:
\n
final de línea)Entonces en vim:
:set ff=unix
:w
En mi caso,
Nada de lo anterior funcionó, tuve un archivo CSV copiado a la máquina Linux desde mi mac y utilicé 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 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 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
Use uno de estos comandos:
:%s/\r//g
O
:%s/\r\(\n\)/\1/g
Esto funcionó para mí:
:% s/\r\n/\r
Ninguna de estas sugerencias funcionó para mí, ya que logré obtener una gran cantidad 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á.
Tiene que escribir ctrl+v ctrl+m
.
^M
da saltos de línea no deseados. Para manejar esto, podemos usar el sed
comando de la siguiente manera:
sed 's/\r//g'
Simplemente elimine set binary
en su .vimrc!
Para usar sed
en MacOS, haga esto:
sed -i.bak $'s/\r//' <filename>
Explicación: La $'STRING'
sintaxis aquí pertenece al shell bash. Las Mac no se tratan \r
como caracteres especiales. Al citar la cadena de comando en, $''
le está diciendo al shell que reemplace \r
con el \r
carácter real especificado en el estándar ANSI-C.
"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). y trabajé a través de este hilo hasta que llegué al metagrafo.
\r
funcionó bien para mí!
/),/s/),/)\r/g
convertido 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