asyncomplete.vim の補完で正しいスペル補完候補をだす
- Vim 8.0 以上
- asyncomplete.vim
使用しているパッケージ・マネージャに従えば良い
Plug 'iranoan/asyncomplete-spell'Plug 'iranoan/asyncomplete-spell'NeoBundle 'iranoan/asyncomplete-spell'call dein#add('iranoan/asyncomplete-spell')git clone https://github.com/iranoan/asyncomplete-spell ~/.vim/pack/iranoan/start/asyncomplete-spell遅延読み込みをさせるなら
git clone https://github.com/iranoan/asyncomplete-spell ~/.vim/pack/iranoan/opt/asyncomplete-spell~/.vim/vimrc などの設定ファイルに次のような記載を加える
call asyncomplete#register_source(asyncomplete#sources#spell#get_source_options({
\ 'priority': 5,
\ }))
\ }))英語を想定しているので、それ以外の言語で使う場合は綴りに使う文字設定必要で、デフォルト相当は
call asyncomplete#register_source(asyncomplete#sources#spell#get_source_options({
\ 'refresh_pattern': '\m\c\([A-Z]\{2,}\|[A-Z]\+''[A-Z]\+\)$',
\ 'allowlist': ['*'],
\ }))設定が終われば、asyncomplete.vim の補完候補に
- 正しいスペルと [--] を表示する
- -- 部には spellbadword() によるスペルミスの種類を表示する
- スペルミスがなければ、補完候補に何も加えない
また
- 単語ごとに2文字以上で補完候補に加える
- asyncomplete.vim は標準設定では前方一致で補完候補を絞り込むので、追加・表示される補完候補は z=, i_CTRL-X_CTRL-S (i_CTRL-X_s) より少なくなる
- CamelCase の綴りは全体でスペル・チェックしてミスが有る場合は、末尾部分で大文字で区切った最長一致でチェックしている
例えば LuaLaTeX では、次の順でチェックしていく- LuaLaTeX
- LaTeX
- TeX
g:asyncomplete_preprocessor を設定すれば良い
例えば重複を除きつつ、asyncomplete-spell 以外は大文字・小文字を区別しない前方一致で絞り込ませるのは次の設定
let g:asyncomplete_preprocessor = [function('s:asyncomplete_preprocessor')]
function s:asyncomplete_preprocessor(options, matches) abort
let l:visited = {}
let l:items = []
let l:base = '^\m' .. escape(a:options['base'], '\.$*~')
for [l:source_name, l:matches] in items(a:matches)
for l:item in l:matches['items']
if !has_key(l:visited, l:item['word'])
\ && ( l:source_name ==# 'spell' || l:item['word'] =~? l:base )
call add(l:items, l:item)
let l:visited[l:item['word']] = 1
endif
endfor
endfor
call asyncomplete#preprocess_complete(a:options, l:items)
endfunction