Al escribir :digraphsdentro de vim, se muestra la tabla de digrafos a la que @LightnessRacesinOrbit se vincula.
askewchan
1
Cuando intentes reemplazar este tipo de personaje usando php, prueba este preg_replace('/[\x01]/', ' ' ,$str); Espero que ayude.
Rachel Geller
Respuestas:
561
Unix usa 0xA para un personaje de nueva línea. Windows usa una combinación de dos caracteres: 0xD 0xA. 0xD es el carácter de retorno de carro. ^Mresulta ser la forma en que vim muestra 0xD (0x0D = 13, M es la decimotercera letra del alfabeto inglés).
Puede eliminar todos los ^Mcaracteres ejecutando lo siguiente:
:%s/^M//g
Donde ^Mse ingresa presionando Ctrly escribiendo vseguido por m, y luego soltando Ctrl. Esto a veces se abrevia como ^V^M, pero tenga en cuenta que debe ingresarlo como se describe en la oración anterior, en lugar de escribirlo literalmente.
Esta expresión reemplazará todas las apariciones de ^Mcon la cadena vacía (es decir, nada). Utilizo esto para deshacerme de los ^Marchivos copiados de Windows a Unix (Solaris, Linux, OSX).
En caso de que esté en Windows, Ctrl + V probablemente se asignará para pegar. Si ese es el caso, los valores predeterminados reasignan la tecla "escape de caracteres especiales" a Ctrl + Q.
R. Martinho Fernandes
8
La verdadera pregunta es por qué Vim a veces detecta automáticamente los finales de línea y muestra correctamente, y a veces no.
Scott
10
Verá el ^Mcarácter si el archivo tiene finales de línea no coincidentes. Use el comando proporcionado por Tomasz, luego escriba :fileformat={unix|dos|mac}según el sistema operativo al que se dirija. Si solo hay unas pocas líneas sin el ^Mcarácter, probablemente quieras :fileformat=dos. Si está editando archivos en un editor que no sea vim, asegúrese de que esté configurado para coincidir con los finales de línea (Notepad no lo hará, pero cualquier editor de buena reputación como Notepad ++ o TextMate sí).
Mikkel Paulson
99
Tenga en cuenta que los principiantes videben escribir ese comando manualmente. Simplemente pegándolo en un terminal abierto con viejecución dará como resultado un error de "patrón no encontrado".
IQAndreas
51
@bluesm que realmente necesitaba usar :%s/\r//gpara reemplazar los retornos de carro en mi archivo. No se pudo encontrar el patrón ^ V ^ M en el archivo en el que tenía un montón de caracteres ^ M.
jonnybot
139
:%s/\r//g
Trabajó para mí hoy. Pero mi situación puede haber sido ligeramente diferente.
no se requiere la opción g, solo hay una nueva línea por línea. :%s/\r//bastaría.
frogcoder
77
Es muy posible que se requiera la opción g, porque un retorno de carro no es necesariamente una nueva línea. Cuando se abre en modo Unix, el retorno de carro es solo otro carácter, y cuando se abre en modo Windows, el retorno de carro solo es especial seguido inmediatamente por el avance de línea.
Jonathan Baldwin
65
Para traducir la nueva línea en lugar de eliminarla:
¿Qué se supone que debe hacer esto? Para mí, parece que está haciendo una sustitución de like por like, que no puedo imaginar que cambie nada. ¿Me estoy perdiendo algo especial sobre cómo funciona la sintaxis aquí?
Platinum Azure
16
@PlatinumAzure No sé por qué nadie pensó en responder tu pregunta. \rtiene un comportamiento diferente en la parte de búsqueda frente a la parte de reemplazo. Ver stackoverflow.com/a/3834303 por ejemplo.
Obtuve un archivo de texto originalmente generado en una máquina Windows por medio de un usuario de Mac y necesitaba importarlo a una base de datos Linux MySQL usando el load datacomando.
Aunque VIM mostró el carácter '^ M', ninguno de los anteriores funcionó para mi problema particular, los datos se importarían, pero siempre estaban dañados de alguna manera. La solución fue bastante fácil al final (después de mucha frustración).
Solución: ¡Ejecutar dos2unixTWICE en el mismo archivo funcionó! El uso del filecomando muestra lo que está sucediendo en el camino.
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
Y la versión final del archivo se importó perfectamente a la base de datos.
Si rompe su configuración, y los caracteres ^ M son necesarios en las asignaciones, simplemente puede reemplazar los caracteres ^ M por <Enter>o incluso <C-m>(ambos escritos como secuencias de caracteres simples, por lo que 7 y 5 caracteres, respectivamente).
Esta es la única forma recomendada y portátil de almacenar códigos de teclas especiales en asignaciones
Si no especificó una fileformatintención diferente (por ejemplo, :e ++ff=unixpara un archivo de Windows), es probable que el archivo de destino tenga EOL mixtos.
Por ejemplo, si un archivo tiene algunas líneas con <CR><NL>terminaciones y otras con
<NL>terminaciones, y Vim lo fileformatconfigura unixautomáticamente al leerlo, ^M (<CR>)aparecerá. En tales casos, fileformatsentra en juego. Ver :help ffspara los detalles.
Descubrí que he estado contaminando archivos durante semanas debido al hecho de que mi instancia de Homebrew Mvim estaba configurada para usar filetype = dos. Hizo el cambio requerido en .vimrc ...
:digraphsdentro de vim, se muestra la tabla de digrafos a la que @LightnessRacesinOrbit se vincula.preg_replace('/[\x01]/', ' ' ,$str);Espero que ayude.Respuestas:
Unix usa 0xA para un personaje de nueva línea. Windows usa una combinación de dos caracteres: 0xD 0xA. 0xD es el carácter de retorno de carro.
^Mresulta ser la forma en que vim muestra 0xD (0x0D = 13, M es la decimotercera letra del alfabeto inglés).Puede eliminar todos los
^Mcaracteres ejecutando lo siguiente:Donde
^Mse ingresa presionando Ctrly escribiendo vseguido por m, y luego soltando Ctrl. Esto a veces se abrevia como^V^M, pero tenga en cuenta que debe ingresarlo como se describe en la oración anterior, en lugar de escribirlo literalmente.Esta expresión reemplazará todas las apariciones de
^Mcon la cadena vacía (es decir, nada). Utilizo esto para deshacerme de los^Marchivos copiados de Windows a Unix (Solaris, Linux, OSX).fuente
^Mcarácter si el archivo tiene finales de línea no coincidentes. Use el comando proporcionado por Tomasz, luego escriba:fileformat={unix|dos|mac}según el sistema operativo al que se dirija. Si solo hay unas pocas líneas sin el^Mcarácter, probablemente quieras:fileformat=dos. Si está editando archivos en un editor que no sea vim, asegúrese de que esté configurado para coincidir con los finales de línea (Notepad no lo hará, pero cualquier editor de buena reputación como Notepad ++ o TextMate sí).videben escribir ese comando manualmente. Simplemente pegándolo en un terminal abierto conviejecución dará como resultado un error de "patrón no encontrado".:%s/\r//gpara reemplazar los retornos de carro en mi archivo. No se pudo encontrar el patrón ^ V ^ M en el archivo en el que tenía un montón de caracteres ^ M.Trabajó para mí hoy. Pero mi situación puede haber sido ligeramente diferente.
fuente
:%s/\r//bastaría.Para traducir la nueva línea en lugar de eliminarla:
fuente
\rtiene un comportamiento diferente en la parte de búsqueda frente a la parte de reemplazo. Ver stackoverflow.com/a/3834303 por ejemplo.:%s/^V^M/^V^M/gvea aquí:%s/\r//gProbablemente significa que tiene retornos de carro (diferentes sistemas operativos usan diferentes formas de señalizar el final de la línea).
Use
dos2unixpara arreglar los archivos o establecer los formatos de archivo en vim:fuente
Digamos que su archivo de texto es - file.txt, luego ejecute este comando -
Convierte el archivo de texto de dos a formato unix.
fuente
Obtuve un archivo de texto originalmente generado en una máquina Windows por medio de un usuario de Mac y necesitaba importarlo a una base de datos Linux MySQL usando el
load datacomando.Aunque VIM mostró el carácter '^ M', ninguno de los anteriores funcionó para mi problema particular, los datos se importarían, pero siempre estaban dañados de alguna manera. La solución fue bastante fácil al final (después de mucha frustración).
Solución: ¡Ejecutar
dos2unixTWICE en el mismo archivo funcionó! El uso delfilecomando muestra lo que está sucediendo en el camino.Y la versión final del archivo se importó perfectamente a la base de datos.
fuente
En Unix, probablemente sea más fácil usar el comando 'tr'.
fuente
Los eliminé todos con sed:
sed -i -e 's/\r//g' <filename>También podría reemplazar con una cadena o carácter diferente:
sed -i -e 's/\r/string/g' <filename>Esos
sedcomandos funcionan en la versión de GNU / Linux,sedpero pueden necesitar ajustes en BSD (incluido macOS).fuente
Puedes arreglar esto en vim usando
donde ^ es el carácter de control.
fuente
^Mes.Esto es lo único que funcionó en mi caso:
:e ++ff=dos:wqfuente
Si rompe su configuración, y los caracteres ^ M son necesarios en las asignaciones, simplemente puede reemplazar los caracteres ^ M por
<Enter>o incluso<C-m>(ambos escritos como secuencias de caracteres simples, por lo que 7 y 5 caracteres, respectivamente).Esta es la única forma recomendada y portátil de almacenar códigos de teclas especiales en asignaciones
fuente
En FreeBSD, puede borrarlo
^Mmanualmente escribiendo lo siguiente::%s/Ctrl+ V, luego Ctrl+ M, luego Ctrl+ Mnuevamente.fuente
Si no especificó una
fileformatintención diferente (por ejemplo,:e ++ff=unixpara un archivo de Windows), es probable que el archivo de destino tenga EOL mixtos.Por ejemplo, si un archivo tiene algunas líneas con
<CR><NL>terminaciones y otras con<NL>terminaciones, y Vim lofileformatconfiguraunixautomáticamente al leerlo,^M (<CR>)aparecerá. En tales casos,fileformatsentra en juego. Ver:help ffspara los detalles.fuente
Descubrí que he estado contaminando archivos durante semanas debido al hecho de que mi instancia de Homebrew Mvim estaba configurada para usar filetype = dos. Hizo el cambio requerido en .vimrc ...
fuente
intente
:%s/\^M//Al menos esto funcionó para mí.fuente