====== Vim a alfanumerické znaky v anglických Windows ====== Pakliže používáte anglickou verzi Windows, systémová funkce //isaplha()// pro znaky s diakritikou ve "starém" kódování CP1250 nevrací pravdivou hodnotu (vrací //false//). To proto, že v angličtině se nepovažuje takové písmenko jako alfanumerický znak. To je trošku problém, protože aplikace, které ještě nepoužívají UTF-8 kódování (například Vim), mají špatné hranice slov. {{ blog:blog:2008:vim-problem-spell.jpg |Problém u spellingu}} Praktický význam to má ten, že když máte kurzor před slovem //Lukáš// a provedete příkaz pro skok o slovo vpřed (klávesa "w"), neskočíte ze znaku "L" na první znak dalšího slova, ale kurzor přistane na znaku //á// -- Vim se domnívá, že slovo je dlouhé tři znaky (//Luk//) a ten zbytek ke slovu nepatří. Podobně se to opakuje u dalšího písmenka (//š//) a tato nepříjemná věc má nejen ve Vimu mnoho dalších podob (například u spellingu -- vizte obrázek). A nyní se podržte. Nepomůže ani to, že si ve Windows nastavíte v **Regional and Language Options** jazyk na češtinu, klávesnici na češtinu (prostě všechno na Czech). Volání //isalpha// stále vrací to samé. Chvíli jsem si lámal hlavu a ptal se známých, napsal jsem dokonce na usenet Microsoftu, ale [[http://groups.google.com/group/microsoft.public.windowsxp.general/browse_thread/thread/9e9a48a535a581cc/3a87132e04f2701a#3a87132e04f2701a|bez odezvy]]. Situaci jsem musel řešit jinak -- naštěstí Vim umožňuje definovat hranice slov "ručně". Provedete to takto (například v souboru _vimrc): " FIX FOR cp1250 and English Windows XP isalpha() problem if has("win32") set iskeyword=@,48-57,_,138,140-143,154,156-159,163,165,170,175,179,185,186,188,190-214,216-246,248-254 endif Pokud by někdo tušil, proč se chová isalpha tak, jak se chová, napište mi. A jak jednoduše zjistit chování? Nainstalujte si do Windows Python a pak zkuste: >>>"a".isalpha() True >>>"Ž".isalpha() ? {{tag>vim}} ~~DISCUSSION~~