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.

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 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()
?