2011-03-18 7 views
6

Estoy buscando algún tipo de complemento/vi-código que detecta si hay ^M (¿devoluciones de carro?) En cualquier archivo o cualquier tipo de indicación de que las terminaciones de línea no son unix, y si es así elimínelos o ejecute dos2unix en el archivo.¿Cómo puedo configurar vim para convertir automáticamente las terminaciones de línea de cualquier archivo de texto que abra en Unix si ya no es unix?

Necesito que esto funcione automáticamente antes/durante la apertura del archivo.

Además, para las personas que van a sugerir formas de convertir los finales de línea manualmente, una respuesta señala hacer :set ff=unix pero esto no mata a ^M en un archivo Unix, creo.

¿Y no hay un truco para usar :%s/^M//g porque usar un literal ^ no coincidirá con el carácter?

+1

Para escribir un^M en vi, ya sea en texto o buscar y reemplazar, escriba 'Ctrl-V', 'Ctrl-M'. – MikeyB

+0

El truco para usar ':% s/^ M // g' es ingresar'^M' como ''. –

+0

Si no desea tener caracteres de control sin procesar en el patrón, use '\ r'. Personalmente prefiero '' al escribir en el modo de comando y '\ r' al escribir un script. – ZyX

Respuesta

1

Dado que marcó este git, puede hacer que git convierta las terminaciones de línea en el checkin/out automáticamente (http://www.kernel.org/pub/software/scm/git/docs/git-config.html)

ps. El truco para hacer^M en un reemplazo es

:%s/{Ctrl+V}{Ctrl+M}//{Enter}

+0

Lo siento, no quise señalarlo como idiota ... alguna persona me estaba haciendo preguntas falsas, así que pensé en ello. Sin embargo, esta es una buena sugerencia y estoy dispuesto a hacerlo en mi VCS, pero aún así me gustaría una respuesta vim. –

+0

¿No funciona: establecer ff = unix en el archivo de inicio? ¿O son estos archivos donde algo más ya ha puesto un literal^M en el archivo? –

+0

En este último caso, he encontrado archivos en los que el usuario pone^M literal en el archivo aunque el formato de archivo sea unix. –

0

Si desea reemplazar cualquier^M en cualquier archivo que se abre, una autocmd como la siguiente en la que vimrc podría ayudar:

au BufReadPost * %s/^M//g 

Insertar el^M como se ha indicado en la respuesta anterior.

3

La función siguiente es interesante porque mantiene el cursor en su posición original lo puso en su. vimrc

" dos2unix ^M 
fun! Dos2unixFunction() 
    let [email protected]/ 
    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() 
au BufReadPost * keepjumps call Dos2unixFunction() 
Cuestiones relacionadas