动态更改键击的拼写检查

时间:2013-07-31 07:51:01

标签: vim spell-checking

您好我发现了spelllang如果是vim。我正努力实现以下目标:

  1. 当我按下说F7时,会打开一个对话框,询问我是否要激活法语或英语词典set spelllang=fr spellset spelllang=en spell
  2. 当我再次按F7时,spell被禁用
  3. 我可以在vimrc

    中轻松完成此类操作吗?

    干杯(我正在使用gvim和windows,但我想这无关紧要)

3 个答案:

答案 0 :(得分:3)

是的,你可以做到这一点。我写了一个小脚本来说明。您可以将其原样放入.vimrc

关键是使用inputlist()提示用户输入数字。当然,您可以根据需要扩展包含可能语言列表的spelllang_list

function! <SID>ToggleSpell()
    let spelllang_list = [ 'fr', 'en' ]
    let string = []

    for i in range(len(spelllang_list))
        call add(string, i+1 . ") " . spelllang_list[i])
    endfor

    if ! &spell
        let &spell = 1
        let selection = inputlist(string)
        let &spelllang = spelllang_list[selection-1]
    else
        let &spell = 0
        echo "'spell' disabled..."
    endif
endfunction

noremap <F7> :call <SID>ToggleSpell()<CR>

答案 1 :(得分:1)

添加

怎么样?
nnoremap <F7>:set spelllang=en<CR>
nnoremap <F8>:set spelllang=fr<CR>
nnoremap <F9>:set spell!

这将使F9切换拼写状态(在正常模式下)。如果您希望所有操作都在状态之间切换,那么您应该编写一个vimscript函数来保存状态信息并对其进行操作。

答案 2 :(得分:1)

我有以下内容,它只使用一个密钥:

setlocal nospell
let g:togglespell = 0
let g:default_langn = 1 "1 for English, 2 for Portuguese
function! ToggleSpell()
  if v:count != 0
    let g:default_langn = v:count
    let g:togglespell = 0 " force spelling this time
  endif
  if g:togglespell == 0
    if g:default_langn == 1
      setlocal spell spelllang=en_us
      echo "language = en_us"
    elseif g:default_langn == 2
      setlocal spell spelllang=pt
      echo "language = pt"
    else
      echom "No language corresponding to such option [1: English, 2 Portuguese]"
    endif
    let g:togglespell = 1
  else
    setlocal nospell
    let g:togglespell = 0
    echo "No spell Checking"
  endif
endfunction
noremap <F8> :<C-U>call ToggleSpell()<CR>

使用此按下<F8>,默认情况下,它会在英语拼写和拼写之间切换。 如果您使用计数调用它,请说2<F8>,然后从该点开始,它将在葡萄牙语拼写或无拼写之间切换。