自动更正拼写错误


19

我已经启用了拼写检查功能

:set spell spelllang=en_us

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

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

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



1
@ArturoVolpe看来这是一个合理的答案。
bsmith89

您可以在重映射中合并先前的错误'[s“吗?我会添加为答案,但不知道如何进行重新映射,因此我将其留给其他人使用。
尼克·J·亚当斯

Answers:


8

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

  • 首先,您将要输入的内容会出现很多误报,尤其是在技术性更强的文章中。您当然可以(也许应该)将这两个词加到词典中,以便对其进行识别和建议。但是,如果您没有注意到它们已被自动更正,它们可能会进入文档的最终版本,或者更糟糕的是,如果您正在编写代码或配置文件(例如,更改xminmin会使图形看起来完全一样)错误)。注释也可能变得怪异(例如,我将“标签和无效指令”更改为“标签和无效指令”,这将含义(a)从名词短语变为命令式,以及(b)变为完全不同的含义。 )
  • 其次,短文字的自动更正效果很差。以我的经验,它趋于完整到最接近的词,例如,三个字母的词可能与您的意思完全不同。如果您要键入但不小心键入fo,它将被纠正为很少的数目-不是您想要的!同样,这些可能很难在粗略的修订中发现。

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

我使用以下映射完成此任务:

" 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手动更改它,这在大多数情况下可以非常快速地完成工作流程。


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

2

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

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


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

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

Mr Rich,我想安装哪个软件包并键入:EnableAutoCorrect我听不懂
MP Creations

@MPCreations您是否使用插件管理器?
Rich

@MPCreations也许看看vi.stackexchange.com/questions/613/…的答案,如果您不知道如何安装插件
Rich
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.