読者です 読者をやめる 読者になる 読者になる

辞書登録的な物

 辞書登録的なスクリプト書いてみました。ソースは長いから最後にするとして、ヴィジュアルモードで部分的に選択してからtdとタイプすると追加されたり、

:ResistDictionary hoge

とやってみるとhogeが追加されたりするはずです。

 登録した辞書を使いたいときは

:ResistDictionaryToggle

でトグルできるようになってる(はず)です。作業時間合計2時間くらい?

" Resist to dictionary {{{2
" Basic {{{3
let g:throw_dictionary = '~/.vim/dict/throw_dictionary.dict'


" command {{{3
command! -nargs=* ResistDictionary call <SID>Throw_dictionary(<q-args>)
command! -nargs=0 ResistDictionaryToggle call <SID>Throw_dictionary_Toggle()


" key mappings {{{3
vnoremap td :<C-U>call <SID>Range_throw()<CR>


function! s:Throw_dictionary(words) "{{{3
  let l:words = split(a:words, ' ')

  if len(l:words) == 0
    return ""
  endif

  execute "split " . g:throw_dictionary

  for l:word in l:words

    for l:i in range(1, line('$'))
      if getline(l:i) == l:word
        silent! close
        silent! execute "bdelete " . g:throw_dictionary
        return ""
      endif
    endfor

    let @z = l:word . "\n"
    normal G"zp
    sort

    if getline(1) == ""
      normal ggdd
    endif

  endfor

  silent! up
  silent! close
  execute "silent! bdelete " . g:throw_dictionary
endfunction


function! s:Throw_dictionary_Toggle() "{{{3
  if (&complete =~ '\V' . g:throw_dictionary)
    execute "setlocal complete-=k" . g:throw_dictionary
  else
    execute "setlocal complete+=k" . g:throw_dictionary
  endif
endfunction


function! s:Range_throw() "{{{3
  normal gv""y
  call <SID>Throw_dictionary(getreg("\""))
endfunction

(:help )