Vim se velmi snaží porozumět tomu, co na něj hodíte, aniž byste si stěžovali. To z něj dělá relativně špatný nástroj pro diagnostiku file
výstup 's.
Vimovo upozornění „[converted]“ naznačuje, že v souboru bylo něco, co by vim neočekával, že uvidí v kódování textu navrženém vaším národním nastavením (LANG atd.).
Ostatní již navrhli
cat -v
xxd
Můžete zkusit grepping pro jiné znaky než ASCII.
grep -P '[\x7f-\xff]' filename
Druhou možností jsou nestandardní konce řádků pro platformu (tj. CRLF nebo CR), ale očekával bych file
vyrovnat se s tím a nahlásit „textový soubor DOS“ nebo podobně.
Pokud spustíte file -D filename
, file
zobrazuje informace o ladění, včetně testů, které provádí. Na konci se zobrazí, jaký test byl úspěšný při určení typu souboru.
U běžného textového souboru to vypadá takto:
[31> 0 regex,=^package[ \t]+[0-9A-Za-z_:]+ *;,""]
1 == 0 = 0
ascmagic 1
filename.txt: ISO-8859 text, with CRLF line terminators
To vám řekne, co zjistil, aby určil, že se jedná o tento typ mime.
Problém jsem našel pomocí binárního vyhledávání k nalezení problematických řádků.
head -n {1/2 line count} file.cpp > a.txt
tail -n {1/2 line count} file.cpp > b.txt
Spuštěn file
proti každé polovině a opakování procesu mi pomohlo najít linii, která se dopustila. Našel jsem ovládací prvek +P (^P
) znak v něm vložený. Odstraněním se problém vyřešil. Napíšu si skript v Perlu, abych tyto znaky (a další rozšířené) v budoucnu vyhledával.
Velké díky všem, kteří poskytli odpověď na všechny tipy!