我已经启用了

:set spell spelllang=en_us


的拼写检查功能,现在可以通过键入1z=来纠正单词的拼写(即,选择1 st拼写更正(z=)) 。

每当我输入空格时,如何使它自动在前一个单词上运行?它还尝试“修复”已经正确拼写的单词(这就是为什么我不能做类似inoremap <space> <esc>mmb1z=`ma<space>的原因),因此,我只想纠正我输入的每个单词如果拼写错误。

是有什么方法可以自动更正Vim中拼写错误的单词?

评论

看到这个

@ArturoVolpe这似乎是对该问题的合理答案。

您可以在重映射中合并先前的错误“ [s”吗?我想补充一下,但不知道如何进行重新映射,因此我将其留给其他人使用。

#1 楼

我建议不要自动修复每个标记为错误的单词,这有两个原因。

首先,您对要键入的内容会产生很多误报,尤其是在技术写作。
您当然可以(也许应该)将这两个词加到词典中,以便被识别和建议。
但是,如果您不注意它们已自动更正,它们可能会滑脱到文档的最终版本,或者更糟糕的是,如果您正在编写代码或配置文件(例如,将xmin更改为min将使图形看起来完全错误)。
注释也可能变得很奇怪(例如,我将“标签和无效指令”更改为“标签和无效指令”,这将含义(a)从名词短语变为命令式,并将(b)含义完全不同。)自动校正在短词方面非常差。
根据我的经验,它通常会补全到最接近的词,例如带有三个字母的字母r字,可能与您的意思完全不同。
如果您要键入fo,但不小心键入,它将被纠正为很少,而不是您想要的!
再次,这些可能很难赶上粗略的修订。

考虑到这一点,我认为您的真正目标是能够快速识别并修复印刷错误。

我使用以下映射来完成this:

" Go back to last misspelled word and pick first suggestion.
inoremap <C-L> <C-G>u<Esc>[s1z=`]a<C-G>u

" Select last misspelled word (typing will edit).
nnoremap <C-K> <Esc>[sve<C-G>
inoremap <C-K> <Esc>[sve<C-G>
snoremap <C-K> <Esc>b[sviw<C-G>


当我键入正文时,根据我的突出显示设置,所有拼错的单词都会加下划线。
如果我看到该单词是相对较长,这是一个简单的错字,那么我可以认为spell可能会正确地解决它,所以我按了<C-L>并继续输入。按下<C-K>并自己进行调整。
最后,如果spell意外改正了错误的内容,则我用<C-G>u设置了撤消标记,因此我可以通过<Esc>ucW手动对其进行更改
大多数情况下,这使得工作流程非常快捷。

评论


自动修复每个单词是一个好主意。

–丰富
'18 Apr 9在14:04



#2 楼

偶然地,我写了一个插件来完成这个任务。名为Vim You,自动更正!

安装后,键入:EnableAutocorrect以在任何缓冲区中将其打开,您很快就会发现wchargin的吓人行为是毫无根据的。

评论


请注意,您对wchargin答案的评论被标记为粗鲁,我对其进行了编辑以删除“ Poppycock!”。并解雇了旗帜。没什么大不了的,仅供参考。

–马丁·图尔诺伊(Martin Tournoij)
18/12/6在8:35

@MartinTournoij很好。 Reddit上的很多人也没有开玩笑。 :)(不过,请多加注意。)

–丰富
18/12/6在23:14

先生Rich我想安装哪个软件包并输入:EnableAutoCorrect我不了解

– MP创作
19-10-25在10:10

@MPCreations您使用插件管理器吗?

–丰富
19-10-25在11:02

@MPCreations也许看看vi.stackexchange.com/questions/613/…的答案,如果您不知道如何安装插件

–丰富
19-10-25在12:28