我想在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>
有什么建议吗?
感谢。
答案 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()')