" Use ispell to highlight spellig errors " Author: Claudio Fleiner modified by Laszlo Nemeth " (replaced "german" by "american", "american" by "magyar"), erased -C ispell flag " F6 - write file, spell file & highlight spelling mistakes " F6 - switch between german and hungarian spelling " F6 - return to normal syntax coloring " I - insert word under cursor into directory " U - insert word under cursor as lowercase into directory " A - accept word for this session only " / - check for alternatives :function! ProposeAlternatives() : let @_=CheckSpellLanguage() : let alter=system("echo ".expand("")." | ispell -a -d ".b:language." | sed -e '/^$/d' -e '/^[@*#]/d' -e 's/.*: //' -e 's/,//g' | awk '{ for(i=1;i<=NF;i++) if(i<10) printf \"map %d :let r=SpellReplace(\\\"%s\\\") | echo \\\"%d: %s\\\" | \",i,$i,i,$i; }'") : if alter !=? "" : echo "Checking ".expand("").": Type 0 for no change, r to replace or" : exe alter : map 0 :let r=SpellRemoveMappings() : map r 0gewcw : else : echo "no alternatives" : endif :endfunction :function! SpellRemoveMappings() : let counter=0 : while counter<10 : exe "map ".counter." x" : exe "unmap ".counter : let counter=counter+1 : endwhile : unmap r :endfunction :function! SpellReplace(s) : exe "normal gewcw".a:s."\" : let r=SpellRemoveMappings() :endfunction :function! ExitSpell() : unmap i : unmap u : unmap a : unmap n : unmap p : unmap : unmap : unmap : unmap : unmap : unmap : unmap : syn match SpellErrors "xxxxx" : syn match SpellCorrected "xxxxx" : syn clear SpellErrors : syn clear SpellCorrected :endfunction :function! SpellCheck() : syn case match : let @_=CheckSpellLanguage() : w : syn match SpellErrors "xxxxx" : syn clear SpellErrors : let b:spellerrors="\\<\\(nonexisitingwordinthisdociumnt" : let b:mappings=system("ispell -l -d ".b:language." < ".expand("%")." | sort -u | sed 's/\\(.*\\)/syntax match SpellErrors \"\\\\<\\1\\\\>\" ".b:spell_options."| let b:spellerrors=b:spellerrors.\"\\\\\\\\\\\\\\\\|\\1\"/'") : exe b:mappings : let b:spellerrors=b:spellerrors."\\)\\>" : map i :let @_=system("echo \\\*".expand("")." \| ispell -a -d ".b:language):syn case match:exe "syn match SpellCorrected \"\\<".expand("")."\\>\" transparent contains=NONE ".b:spell_options : map u :let @_=system("echo \\\&".expand("")." \| ispell -a -d ".b:language):syn case ignore:exe "syn match SpellCorrected \"\\<".expand("")."\\>\" transparent contains=NONE ".b:spell_options : map a :syn case match:exe "syn match SpellCorrected \"\\<".expand("")."\\>\" transparent contains=NONE ".b:spell_options : map :let @_=ExitSpell() : exe "map n /".b:spellerrors."\" : exe "map p ?".b:spellerrors."\" : map :let @_=system("echo \\\*".expand("")." \| ispell -a -d ".b:language):syn case match:exe "syn match SpellCorrected \"\\<".expand("")."\\>\" transparent contains=NONE ".b:spell_options : map :let @_=system("echo \\\&".expand("")." \| ispell -a -d ".b:language):syn case ignore:exe "syn match SpellCorrected \"\\<".expand("")."\\>\" transparent contains=NONE ".b:spell_options : map :syn case match:exe "syn match SpellCorrected \"\\<".expand("")."\\>\" transparent contains=NONE ".b:spell_options : map :let @_=ExitSpell() : exe "map /".b:spellerrors."\" : exe "map ?".b:spellerrors."\" : syn cluster Spell contains=SpellErrors,SpellCorrected : hi link SpellErrors Error : exe "normal \" :endfunction :function! CheckSpellLanguage() : if !exists("b:spell_options") : let b:spell_options="" : endif : if !exists("b:language") : let b:language="magyar" : elseif b:language !=? "american" : let b:language="magyar" : endif :endfunction :function! SpellLanguage() : if !exists("b:language") : let b:language="american" : elseif b:language ==? "magyar" : let b:language="american" : else : let b:language="magyar" : endif : echo "Language: ".b:language :endfunction map :let @_=SpellCheck() map / :let @_=ProposeAlternatives() map :let @_=ProposeAlternatives() map :let @_=SpellLanguage()