Vim se esfuerza mucho por dar sentido a lo que sea que le arrojes sin quejarse. Esto lo convierte en una herramienta relativamente pobre para diagnosticar file
Salida de.
El aviso "[convertido]" de Vim indica que había algo en el archivo que Vim no esperaría ver en la codificación de texto sugerida por la configuración local (LANG, etc.).
Otros ya han sugerido
cat -v
xxd
Podría intentar grepping para caracteres que no sean ASCII.
grep -P '[\x7f-\xff]' filename
La otra posibilidad son finales de línea no estándar para la plataforma (es decir, CRLF o CR), pero esperaría file
para hacer frente a eso y reportar "archivo de texto DOS" o similar.
Si ejecuta file -D filename
, file
muestra información de depuración, incluidas las pruebas que realiza. Cerca del final, mostrará qué prueba fue exitosa para determinar el tipo de archivo.
Para un archivo de texto regular, se ve así:
[31> 0 regex,=^package[ \t]+[0-9A-Za-z_:]+ *;,""]
1 == 0 = 0
ascmagic 1
filename.txt: ISO-8859 text, with CRLF line terminators
Esto le dirá lo que encontró para determinar que es ese tipo de mimo.
Encontré el problema usando la búsqueda binaria para localizar las líneas problemáticas.
head -n {1/2 line count} file.cpp > a.txt
tail -n {1/2 line count} file.cpp > b.txt
Ejecutando file
contra cada mitad, y repitiendo el proceso, me ayudó a localizar la línea ofensiva. Encontré un Control +P (^P
) carácter incrustado en él. Quitarlo resolvió el problema. Me escribiré un script en Perl para buscar estos caracteres (y otros extendidos) en el futuro.
¡Muchas gracias a todos los que respondieron todos los consejos!