2009-04-28 16 views
74

Estoy usando gVim en Windows. Mi código muestra ^M caracteres al final de las líneas. Utilicé :set ff=dos inútilmente. Los caracteres ^M permanecen para las líneas existentes, pero no aparecen para las líneas nuevas que ingreso. Cambié los modos a Mac (muestra ^J caracteres) y Unix (también muestra ^M caracteres) y regreso a dos. ¿Alguien más ha visto esto?gVim que muestra el retorno de carro (^ M) incluso cuando el modo de archivo es explícitamente DOS

+0

Ver http://vim.wikia.com/wiki/File_format para una explicación completa de los finales de línea en vim/gvim. Este enlace también explica cómo solucionar el problema. – axiopisty

Respuesta

133

Esto sucede cuando tiene una mezcla de terminaciones de línea de Windows y Unix. Si tiene 100 líneas, 99 son \ r \ n y una es \ n, verá 99^M caracteres. La solución es encontrar esa línea y reemplazarla. O ejecuta dos2unix en el archivo. Puede reemplazar los finales de línea de Windows con:

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

+0

Encontré esa línea justo antes de que escribieras esto. :) ¡Gracias! – Jerph

+1

Heh, típico. Vim es genial, ¡quédate con eso! :-) – richq

+2

deseo que podría darle 1000 para este – espais

19

que suelen utilizar los siguientes para la limpieza de mis finales de línea:

:g/^M$/s/// 

Para obtener el Ctrl-M por lo general pulse Ctrl-Q, entonces ctrl-M y lo pone en. (En algunos entornos puede ser ctrl-V luego ctrl-M.) No sé por qué, pero me parece más fácil de recordar que rq.

No olvides hacer :set ff=dos también, o terminarás ahorrando con los finales de línea de UNIX todavía.

+0

Sí, normalmente usa la^^ versión con Ctrl-Q y todo eso. Pero es más difícil de explicar ;-) y la versión de coincidencia de grupo es amigable con el copy paste. – richq

14

sé que esto ya ha sido contestada, pero un truco que utilizo es

:%s/\r/\r/g 

Esto reemplaza los saltos de UNIX con el CRLF ventanas. Acaba de agregarse en caso de que alguien más tuviera problemas.

+0

esto funciona genial !! – Gordon

4

En realidad lo que funcionó para mí (en Windows de 64 bits, gVim: 7,2):

:set ffs=dos 

no sólo: ff

4

Ejecución de Vim 7.3 en Windows 7. He utilizado el siguiente comando:

:%s/^M/\r/g 

Para crear el^MI escrito en CTRL + Q y luego CTRL + M.

40

También puede ejecutar:

:e ++ff=dos 

Para retirar la ^M: Ver File format – Vim Tips Wiki.

+1

gracias, eso es nuevo para mí – Jerph

+0

¡Funciona genial gracias! – volting

+4

Esto era lo que estaba buscando, y es la respuesta correcta real. Gracias. –

2

Esto es probablemente un poco simple para muchos de ustedes, pero por si acaso es útil.

Basado en la respuesta de richq, encontré que estos son útiles en mi vimrc. Tenga en cuenta que el segundo comentario está comentado normalmente porque hace que dd sea un poco confuso ya que Vim esperará a que funcione otro golpe de tecla si se trata del comando ex mapeado.

 
function! D2u() 
    execute '%s/\r\(\n\)/\1/g' 
endfunction 
"map d2u :%s/\r\(\n\)/\1/g 

El primero se ejecuta escribiendo call D2u() en ex y la segunda pulsando D2u en modo de edición.

6

¡Puede ignorar estos caracteres!

poner esto en su vimrc

partido Ignorar/\ R $/

+1

Es bueno saber que está ahí, pero ¿existe un buen caso de uso para dejar terminaciones de línea no coincidentes en un archivo? Parece que está buscando problemas. – Jerph

+1

Esto es más de lo que necesitaba (cambiar el archivo no siempre es recomendable cuando causa cambios masivos en un archivo que aparece en algunos sistemas de control de revisiones) – RunHolt

+0

Desafortunadamente, esto cambia las terminaciones de línea tan pronto como guarde el archivo. Por lo tanto, produce exactamente estos grandes cambios no deseados en espacios en blanco, solo sin mostrarte. Al menos para mi. :( –

2

Estos son los finales de línea CR adicionales por lo general a causa de un utilizando un archivo en sistemas UNIX/DOS mixtos.

Posible la respuesta más corta a eliminar un solo^M desde el final de cada línea, y lo que yo uso, es decir:

:%s/\r 

que es equivalente a:

:%s/\r// 

pero el fin no se requieren barras (se supone).

0

probado un montón de cosas, pero la siguiente trabajaron

:%s/\r/\r/g 

Nota: El uso g si desea que el efecto sobre todo el archivo

Cuestiones relacionadas