[voikko] Oikoluku Vim-editoriin
Teemu Likonen
tlikonen at iki.fi
Mon Aug 11 09:45:08 EEST 2008
Teemu Likonen kirjoitti (10.8.2008 klo 21.50):
> Tunnistamattomat sanat maalataan Vimin värikoodilla
> SpellErrors - sama, mitä sisäänrakennettu oikolukukin käyttää.
Tässä olin väärässä. Vimin sisäisen oikoluvun väritunniste on SpellBad,
joten käytänpä itsekin samaa. Oletusvärit näyttävät olevan punainen
aaltomainen alleviivaus graafisessa versiossa ja punainen tausta
terminaaliversiossa.
> Todennäköisesti hion tätä Vim-laajennosta vielä jonkin verran mutta
> ajattelin jo mainostaa ensimmäistä prototyyppiä tällä listalla. Tässä
> vaiheessa ihmeempiä virhetilanteiden tarkistuksia ei ole.
Lisäsin virhetilanteiden tarkistuksia ja muuta logiikkaa, jotta
oikolukulaajennos toimii paremmin yhteen muiden Vimissä olevien
ikkunoiden ja puskureiden kanssa. Nyt tätä ehkä uskaltaa tarjota
tavallisillekin ihmisille. :)
Uusi versio liitteenä.
-------------- next part --------------
" Enchant-pohjainen oikoluku Vim-editoriin
"
" Version: 0.0.0.0.2
" Maintainer: Teemu Likonen <tlikonen at iki.fi>
" License: Public domain
" {{{1 Vakiot
if &compatible || v:version < 700 || !executable('enchant') || exists('g:loaded_enchant_spellcheck')
finish
endif
let s:save_cpo = &cpo
set cpo&vim
let s:spellcheck_prg = 'enchant -l'
let s:match_group = 'SpellBad'
if !hlexists(s:match_group)
execute 'highlight '.s:match_group.' term=reverse ctermbg=1 gui=undercurl guisp=Red'
endif
function! s:SpellCheckSwitch(switch) "{{{1
if a:switch
if !exists('b:enchant_spellcheck_save_isk')
let b:enchant_spellcheck_save_isk = &l:isk
endif
if !exists('w:enchant_spellcheck_matches')
let w:enchant_spellcheck_matches = getmatches()
endif
setlocal isk&vim
call s:CheckSpelling()
augroup EnchantSpellCheck
autocmd!
autocmd CursorHold,CursorHoldI <buffer> call s:CheckSpelling()
autocmd BufWinLeave <buffer> call s:SpellCheckSwitch(0)
augroup END
echo 'Spell-checking turned on'
else
augroup EnchantSpellCheck
autocmd!
augroup END
if exists('b:enchant_spellcheck_save_isk')
let &l:isk = b:enchant_spellcheck_save_isk
unlet b:enchant_spellcheck_save_isk
endif
if exists('w:enchant_spellcheck_matches')
call clearmatches()
call setmatches(w:enchant_spellcheck_matches)
unlet w:enchant_spellcheck_matches
endif
if &term != 'builtin_gui'
redraw!
endif
echo 'Spell-checking turned off'
endif
endfunction
function! s:CheckSpelling() "{{{1
call clearmatches()
let line = winsaveview()['topline']
let lines = winheight(0)
let content_string = ''
while lines > 0 && line <= line('$')
let fold_end = foldclosedend(line)
if fold_end > 0
let line = fold_end
else
let content_string .= getline(line).' '
endif
let line += 1
let lines -= 1
endwhile
let spelling_errors = split(system(s:spellcheck_prg,content_string))
for word in spelling_errors
call matchadd(s:match_group,'\V\C\<'.word.'\>')
endfor
if &term != 'builtin_gui'
redraw!
endif
endfunction
" {{{1 Komennot
if !exists(':EnchantSpellCheckOn') && !exists(':EnchantSpellCheckOff')
command EnchantSpellCheckOn call s:SpellCheckSwitch(1)
command EnchantSpellCheckOff call s:SpellCheckSwitch(0)
endif
nnoremap <silent> <Plug>EnchantSpellCheckOn :call <SID>SpellCheckSwitch(1)<CR>
nnoremap <silent> <Plug>EnchantSpellCheckOff :call <SID>SpellCheckSwitch(0)<CR>
function! s:Add_Mapping(mode, lhs, rhs)
if maparg(a:lhs, a:mode) == '' && !hasmapto(a:rhs, a:mode)
execute a:mode.'map '.a:lhs.' '.a:rhs
endif
endfunction
call s:Add_Mapping('n','<Leader>s1','<Plug>EnchantSpellCheckOn')
call s:Add_Mapping('n','<Leader>s0','<Plug>EnchantSpellCheckOff')
delfunction s:Add_Mapping
" {{{1 Loppujutut
let g:loaded_enchant_spellcheck = 1
let &cpo = s:save_cpo
" vim600: fdm=marker
More information about the voikko
mailing list