:set spell spelllang=en_us
的拼写检查功能,现在可以通过键入
1z=
来纠正单词的拼写(即,选择1
st拼写更正(z=
)) 。每当我输入空格时,如何使它自动在前一个单词上运行?它还尝试“修复”已经正确拼写的单词(这就是为什么我不能做类似
inoremap <space> <esc>mmb1z=`ma<space>
的原因),因此,我只想纠正我输入的每个单词如果拼写错误。是有什么方法可以自动更正Vim中拼写错误的单词?
#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
评论
看到这个@ArturoVolpe这似乎是对该问题的合理答案。
您可以在重映射中合并先前的错误“ [s”吗?我想补充一下,但不知道如何进行重新映射,因此我将其留给其他人使用。