在Vim中检查光标下的单词拼写

5
我希望在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个回答

4

您的函数问题在于:normal("z=")不是调用normal命令的正确方式。应该只是: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=可以进行拼写检查而不带有颜色。

如果您想要可切换的颜色,您可以创建一些映射来设置高亮规则。


谢谢,FDinoff。是的,我想我可以将我的键位映射为在需要时切换拼写颜色。 - Jeet

1

是的,因为z=命令所做的查询,这确实很棘手。不能立即再次关闭拼写检查。我的SpellCheck插件通过一个: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()')

谢谢,Ingo。这是一个不错的插件,但对于我所考虑的特定用例来说太重了。我希望有更轻量级的解决方案——最好是一个函数。但总的来说,我确实喜欢你的插件! - Jeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接