Portál AbcLinuxu, 12. července 2025 13:35


Dotaz: Vim: "embedovat" informaci o kódování do souboru

16.4.2009 15:17 Boris Dušek | skóre: 22 | blog: everything
Vim: "embedovat" informaci o kódování do souboru
Přečteno: 490×
Odpovědět | Admin

Zdravím,

mám jeden soubor, do kterého chci vepsat informaci tak, aby ho Vim (popř. i Emacs) bezpodmínečně bral jako kódovaný v UTF-8. Je to z důvodu, aby i lidi, kteří nemají nastavené utf8 jako default, viděli při otevření toho souboru správně všechny znaky.

Zkoušel jsem na první řádek dát ("%" je znak pro komentář v daném jazyce):

% vim: set fileencoding=utf8

a obdobně i s "encoding", ale bez úspěchu. Zatímco když dám Vimu přímo příkaz ":set encoding=utf-8", tak se české znaky zobrazí správně (ale ":set fileencoding=utf8 nefunguje).

Jak se dá Vimu (a popř. i Emacsu) takhle přímo v souboru říct, v jakém je kódování?

Dík, Boris

vim ~/.emacs
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Tarmaq avatar 16.4.2009 17:02 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
piste to bez toho set
melo by tedy fungovat:
% vim: fileencoding=utf8
ja osobne mam paticku v souborech obvykle takovouto
// vim: et sts=4 sw=4 fdm=marker cms=\ //\ %s
Don't panic!
16.4.2009 17:29 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru
Jen doplním že jsou dva zápisy modeline, zjednodušeně řečeno
% vim: foo=boo bar=baz
nebo
% vim: set foo=boo bar=baz :
A fenc v nich z principu nebude to fungovat, protože je potřeba jej nastavit dřív, než se načte soubor (ve kterém je ovšem ta modeline).
17.4.2009 15:34 joe
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru
Tam kde sis to přečetl je taky vedeno co to v praxi znamená ;)
17.4.2009 20:14 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru
Ano, v helpu vimu je uvedeno v podstatě všechno vědění lidstva, takže je tam určitě i "co to v praxi znamená", ať už jste tím myslel cokoliv ;)
16.4.2009 17:47 Boris Dušek | skóre: 22 | blog: everything
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru

Díky, bez toho set, a s nastavováním "encoding" místo "fileencoding" to funguje!

vim ~/.emacs
16.4.2009 20:06 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru
Jen upozorňuji že ho vim nebere jako "kódovaný v utf-8", ale jako kódovaný v něčem (fileencoding) a následně konvertovaný (iconv) do utf-8. Což vždycky nemusí být to co potřebujete.
16.4.2009 17:04 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Potíž je v tom, že pokud se soubor nejdřív otevře, tak už se musí otvírat v nějakém kódování, takže jeho následná případná změna už je s křížkem po funuse.

Osobně používám ve vimu detekci kódování pomocí enca, a u specifických souborů typu archiv z mobilu o kterých vím, že by je neca nepoznala používám takový trik s koncovkou souboru ve ~/.vimrc, pro utf-8 např.:
if has("autocmd")
  au BufReadPre *.utf8 set fencs=utf-8
  au BufReadPre *.utf8 set fenc=utf-8
endif
díky čemuž se vnutí kódování ještě před otevřením souboru (BufRead), ale vyžaduje to úpravu ~/.vimrc. Že by bylo nějaké univerzální řešení které by to vynutilo dané kódování i někde "u klienta" o tom nevím, záleží dost na tom jak to má ošéfované ten klient, žejo...
16.4.2009 17:52 Boris Dušek | skóre: 22 | blog: everything
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru

Na univerzální řešení si budeme asi muset počkat, až to budou filesystémy uchovávat v atributech souboru, a všude se ta informace bude předávat.

vim ~/.emacs
Fuky avatar 17.4.2009 17:14 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Vim: "embedovat" informaci o kódování do souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Autodetekce kodovani ve Vimu pomoci programu enca
-- RÁMO: psí tábor , ETriatlon: Výuka plavání

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.