【问题标题】:Dynamically change spell checking on a key stroke在按键上动态更改拼写检查
【发布时间】:2013-07-31 15:18:49
【问题描述】:

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

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

我可以在我的vimrc 中轻松地做这样的事情吗?

干杯(我正在使用 gvim 和 windows,但我想没关系)

【问题讨论】:

    标签: vim spell-checking


    【解决方案1】:

    添加呢

    nnoremap <F7>:set spelllang=en<CR>
    nnoremap <F8>:set spelllang=fr<CR>
    nnoremap <F9>:set spell!
    

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

    【讨论】:

    • 谢谢,但我正在寻找更高级的东西(我希望使用一张地图来完成所有这些工作)
    【解决方案2】:

    是的,您可以做到这一点。我写了一个小脚本来说明。您可以将其原样放入您的.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>
    

    【讨论】:

      【解决方案3】:

      我有以下,它只使用一个键:

      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>
      

      按下&lt;F8&gt;,默认情况下它会在无拼写和英文拼写之间切换。 如果您使用计数调用它,例如2&lt;F8&gt;,那么从那时起,它将在葡萄牙语拼写或不拼写之间切换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-07
        • 2017-05-13
        • 2011-12-27
        • 2015-01-12
        • 2019-10-07
        • 2019-07-02
        • 1970-01-01
        • 2018-02-10
        相关资源
        最近更新 更多