在Vim中用光标拼写检查单词

时间:2014-03-04 19:02:29

标签: vim spell-checking

我想在Vim中快速拼写检查光标下的单词。

在原生Vim中执行此操作需要我:

(1)激活拼写  (2)检查一下这个词  (3)停用拼写

(1)和(3)的原因是我一直不想要拼写模式(例如,我可能正在编写函数/类文档,并且不希望拼写突出显示非自然语言单词代码)。

我觉得这样的事情可能有用:

nnoremap <F1> :setlocal spell<CR>z=:setlocal nospell<CR>

但是,当然,最后一个条款(:setlocal nospell)会干扰并取消拼写检查。

我也尝试了以下方法,但这也不起作用:

function! s:spell_check_current()
  :setlocal spell
  :normal("z=")
  :setlocal nospell
endfunction
nnoremap <F1> :call <SID>spell_check_current()<CR>

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:3)

您的功能问题是:normal("z=")不是调用普通命令的正确方法。它应该只是:normal z=,因为它不是一个函数。其次,不需要前导:。所以函数将是

function! s:spell_check_current()
  setlocal spell
  normal z=
  setlocal nospell
endfunction
nnoremap <F1> :call <SID>spell_check_current()<CR>

虽然这会打开拼写检查窗口,但它不允许用户输入任何内容,因此这可能无法正常工作。


相反,您应该关闭拼写检查的突出显示,因为这似乎是最让您烦恼的事情。

加载配色方案后添加这些颜色应禁用颜色。

highlight clear SpellRare 
highlight clear SpellBad 
highlight clear SpellCap 
highlight clear SpellLocal

这使得z=可以在没有颜色的情况下进行拼写检查。

如果您希望颜色可以切换,您可以创建一些映射来放置突出显示规则。

答案 1 :(得分:1)

是的,由于z=命令的查询,这确实很棘手。人们不能立即再次关闭拼写检查。我的SpellCheck plugin通过法术修正后不久触发的:autocmd来解决问题。您可以使用插件的基础结构来包装z=命令。将以下内容放入~/.vimrc

nnoremap <silent> <expr> z= SpellCheck#mappings#SpellSuggestWrapper('call SpellCheck#mappings#SpellRepeat()')
xnoremap <silent> <expr> z= SpellCheck#mappings#SpellSuggestWrapper('call SpellCheck#mappings#SpellRepeat()')