unix - remove - ¿Qué significa el carácter ^ M en Vim?
salir de vi linux (15)
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 ....
Sigo obteniendo el carácter ^M
en mi vimrc y rompe mi configuración.
Digamos que su archivo de texto es - file.txt, luego ejecute este comando -
dos2unix file.txt
Convierte el archivo de texto de formato DOS a UNIX.
En FreeBSD, puede borrar la ^M
manualmente escribiendo lo siguiente:
:%s/
Ctrl + V , luego Ctrl + M , luego Ctrl + M otra vez.
En Unix es probablemente más fácil usar el comando ''tr''.
cat file1.txt | tr "/r" "/n" > file2.txt
Esto es lo único que funcionó en mi caso:
:e ++ff=dos
:wq
Los quité todos con sed:
sed -i -e ''s//r//g''
También podría reemplazar con una cadena o carácter diferente:
sed -i -e ''s//r/string/g''
Obtuve un archivo de texto originalmente generado en una máquina de Windows por medio de un usuario de Mac y necesitaba importarlo a una base de datos MySQL de Linux usando el comando load data
.
Aunque VIM mostraba el carácter ''^ M'', ninguno de los anteriores funcionaba para mi problema particular, los datos se importaban 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 dos2unix
DOS VECES en el mismo archivo hizo el truco! El uso del comando de file
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 importado perfectamente en la base de datos.
Para traducir la nueva línea en lugar de eliminarla:
:%s//r//r/g
Probablemente significa que tiene retornos de carro (diferentes sistemas operativos usan diferentes formas de señalar el final de la línea).
Use dos2unix
para arreglar los archivos o configurar los formatos de archivo en vim:
set ffs=unix,dos
Puedes arreglar esto en vim usando
:1,$s/^V^M//g
donde ^ es el personaje de control.
Si no especificó un fileformat
diferente intencionalmente (por ejemplo fileformat
:e ++ff=unix
para un archivo de Windows), es probable que el archivo de destino tenga EOL mixtos.
Por ejemplo, si un archivo tiene algunas líneas con finales <CR><NL>
y otros con finales <NL>
, y fileformat
configura el fileformat
en unix
automáticamente al leerlo, aparecerá ^M (<CR>)
. En tales casos, los fileformats
entran en juego. Ver :help ffs
para los detalles.
Si rompe su configuración, y se requieren los caracteres ^ M en las asignaciones, puede simplemente reemplazar los caracteres ^ M por <Enter>
o incluso <Cm>
(ambos escritos como secuencias de caracteres simples, por lo tanto, 7 y 5 caracteres, respectivamente).
Esta es la única forma recomendada y portátil de almacenar códigos clave especiales en asignaciones
Unix usa 0xA para un carácter de nueva línea. Windows usa una combinación de dos caracteres: 0xD 0xA. 0xD es el carácter de retorno de carro. ^M
es la forma en que vim muestra 0xD (0x0D = 13, M es la letra 13 en el alfabeto inglés).
Puede eliminar todos los caracteres ^M
ejecutando lo siguiente:
:%s/^M//g
Donde se ingresa ^M
presionando Ctrl y escribiendo v seguido de 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 ^M
con la cadena vacía (es decir, nada). Lo uso para deshacerme de ^M
en archivos copiados de Windows a Unix (Solaris, Linux, OSX).
try :%s//^M//
Al menos esto funcionó para mí.
:%s//r//g
Trabajó para mí hoy. Pero mi situación puede haber sido ligeramente diferente.