Vim essaie très fort de donner un sens à tout ce que vous lui lancez sans se plaindre. Cela en fait un outil relativement médiocre à utiliser pour diagnostiquer file
de sortie.
L'avis "[converti]" de Vim indique qu'il y avait quelque chose dans le fichier que vim ne s'attendrait pas à voir dans l'encodage de texte suggéré par vos paramètres régionaux (LANG, etc.).
D'autres ont déjà suggéré
cat -v
xxd
Vous pouvez essayer de rechercher des caractères non ASCII.
grep -P '[\x7f-\xff]' filename
L'autre possibilité est des fins de ligne non standard pour la plate-forme (c'est-à-dire CRLF ou CR) mais je m'attendrais à file
pour faire face à cela et signaler "fichier texte DOS" ou similaire.
Si vous exécutez file -D filename
, file
affiche des informations de débogage, y compris les tests qu'il effectue. Vers la fin, il montrera quel test a réussi à déterminer le type de fichier.
Pour un fichier texte normal, cela ressemble à ceci :
[31> 0 regex,=^package[ \t]+[0-9A-Za-z_:]+ *;,""]
1 == 0 = 0
ascmagic 1
filename.txt: ISO-8859 text, with CRLF line terminators
Cela vous dira ce qu'il a trouvé pour déterminer qu'il s'agit de ce type mime.
J'ai trouvé le problème en utilisant la recherche binaire pour localiser les lignes problématiques.
head -n {1/2 line count} file.cpp > a.txt
tail -n {1/2 line count} file.cpp > b.txt
Exécution de file
contre chaque moitié, et en répétant le processus, m'a aidé à localiser la ligne incriminée. J'ai trouvé un contrôle +P (^P
) caractère intégré dedans. Le retirer a résolu le problème. J'écrirai moi-même un script Perl pour rechercher ces caractères (et d'autres étendus) à l'avenir.
Un grand merci à tous ceux qui ont fourni une réponse pour tous les conseils !