it-swarm-eu.dev

Jak mohu nastavit výchozí kódování VIM na UTF-8?

Chtěl bych přispět k projektu s otevřeným zdrojovým kódem poskytujícím přeložené řetězce. Jedním z jejich požadavků je, že přispěvatelé musí použít UTF-8 jako kódování pro soubory PO.

Používám v systému Linux VIM 7.3). Jak si mohu být jistý, že kódování VIM je nastaveno na UTF-8, abych mohl správně upravovat a ukládat soubor .po?

63
Paolo

Když Vim přečte existující soubor, pokusí se zjistit kódování souboru. Při zápisu souboru používá Vim kódování souboru, které zjistil (s výjimkou případů, kdy to řeknete jinak). Takže soubor detekovaný jako UTF-8 je zapsán jako UTF-8, soubor detekovaný jako Latin-1 je zapsán jako Latin-1 atd.

Ve výchozím nastavení je proces detekce hrubý. Každý soubor, který otevřete pomocí Vim, bude považován za Latin-1, pokud nezjistí značku bajtového pořadí Unicode nahoře. Soubor UTF-8 bez značky bajtového pořadí bude obtížné upravit, protože všechny vícesbajtové znaky budou zobrazeny ve vyrovnávací paměti jako sekvence znaků namísto jednotlivých znaků.

Horší je, že Vim ve výchozím nastavení používá k reprezentaci textu ve vyrovnávací paměti Latin-1. Takže soubor UTF-8 s značkou bajtového řádu bude poškozen konverzí dolů na Latin-1.

Řešením je nakonfigurovat Vim tak, aby interně používal UTF-8. To je ve skutečnosti doporučeno v dokumentaci Vim a jediným důvodem, proč není nakonfigurováno tak, aby se zabránilo vybalení, je zabránit tomu, aby mezi uživateli, kteří očekávají, že Vim bude fungovat jako editor Latin-1, nedošlo k obrovskému zmatku.

Ve vašem .vimrc, přidejte set encoding=utf-8 a restartujte Vim.

Nebo místo toho nastavte proměnnou prostředí LANG, která označuje, že preferovaným kódováním znaků je UTF-8. To ovlivní nejen Vim, ale jakýkoli software, který se spoléhá na LANG, aby určil, jak má reprezentovat text. Například pro označení toho, že text by se měl objevit v angličtině (en), jak je ve Spojených státech používán (US), kódovaný jako UTF-8 (utf-8), nastavte LANG=en_US.utf-8.

Nyní Vim použije UTF-8 k reprezentaci textu ve vyrovnávací paměti. Navíc bude také více rozhodovat o detekci kódování UTF-8 v souboru. Kromě toho, že hledá značku bajtového pořadí, zkontroluje také UTF-8 bez značky bajtového pořadí, než se vrátí zpět na latinu-1. Tím již nebude poškozen soubor kódovaný v UTF-8 a měl by během editace správně zobrazovat znaky UTF-8.

Další informace o tom, jak Vim detekuje kódování souboru, najdete v možnost fileencodings v dokumentaci Vim .

Další informace o nastavení kódování, které Vim používá interně, viz možnost encoding .

Pokud potřebujete potlačit kódování použité při zápisu souboru zpět na disk, viz možnost fileencoding .

67
MetaEd

Podle vimdoc vim se snaží automaticky detekovat kódování souborů, takže pokud editujete existující soubory , měli byste být dobrí.

Můžete vždy vynutit kódování, pokud chcete pomocí :set fileencodings=utf-8. Dokumentaci najdete zde .

5
Mr Shunz