Vim 内置拼写检查器,使用命令 :set spell 可以对当前文件中所有未在字典中出现过的单词进行标记并高亮显示。

Vim 普通模式下,使用 [s]s 命令可以在拼写错误间进行反向或正向跳转。当 Vim 光标位置某个错误单词之上时,可以使用 z= 命令获取 Vim 提供的更正建议列表,再输入 1<CR> 来选择编号为 1 的单词。如果已经确认第一项建议单词就是目标词,可以直接使用 1z= 跳过提示直接采纳第一个单词进行更正。

1. 指定拼写单词

Vim 的拼写检查器开启后将使用英语字典作为缺省的拼写字典进行单词比较,可以通过配置 spelllang 选项更改缺省设置。

注意spelllang 选项不是全局性的,它永远只在当前缓冲区生效。所以当编辑两个或两个以上的文档时,可以分别采用不同的拼写文件。

Vim 的发行版本身内置了支持英语的拼写文件,可以到 http://ftp.vim.org/vim/runtime/spell/ 下载 Vim 所支持的其他几十种语言的拼写字典。当通过 set spellang 尝试加载某个尚未得到系统支持的拼写文件时,Vim 会基于一个内置于发行版中的 spellfile.vim 插件提供自动下载和安装的能力。

vim-spelllang

2. 增加单词到拼写字典

既然是字典文件,当然可以对其进行增加和删除操作。

可以使用 zg 命令将当前光标下的单词添加到 Vim 的拼写字典中;使用 zw 命令将光标所在处的单词标记为拼写错误 (即将该单词从拼写文件中删除);此外,Vim 专门提供了一条撤销命令 zug,用于撤销对光标下单词所执行的 zgzw 命令。

spellfile 选项用于指定由 zgzw 命令添加、删除的单词所保存的文件路径。如以下配置所示,可以同时指定多个拼写文件,维护多份单词列表。

1
2
3
setlocal spelllang=en_us
setlocal spellfile=~/.vim/spell/en.utf-8.add
setlocal spellfile+=~/vimjc.com/vimtutor/jargon.utf-8.add

下表总结了在普通模式下操作 Vim 拼写检查器的基本命令。

命令 用途
]s 跳到下一处拼写错误
[s 跳到上一处拼写错误
z= 为当前单词提供更正建议
zg 把当前单词添加到拼写文件中
zw 把当前单词从拼写文件中删除
zug 撤销针对当前单词的 zgzw 命令

3 插入模式下更正拼写错误

假设刚使用 Vim 输入完一行文本,却突然发现位于几个单词之前的地方出现了一处拼写错误。该怎么办呢?

最常规的做法是先切换到普通模式,再通过 [s 命令跳回到出现拼写错误的地方,用 z= 将其更正后再通过 A 命令切回到插入模式,并跳到刚才的位置继续编辑。

另外一种更加高效的方法是直接在插入模式下通过 <Ctrl-x>s (或 <Ctrl-x><Ctrl-s> )命令更正拼写错误,该命令会触发一个特殊的自动补全功能 (参见 :h compl-spelling)。

插入模式下使用 <Ctrl-x>s 获得的自动补全单词列表所提供的补全建议与通过 z= 命令所获得的结果完全一致。但与 Vim 自带的单词补齐功能所不同的是,执行 <Ctrl-x>s 时,Vim 会从光标位置开始进行反向扫描,直到发现一处拼写错误为止;然后,它再根据更正建议创建单词列表,并将它们显示在弹出式菜单中。

当某行文本出现的相同拼写错误不止一处时,在插入模式下执行多次 <Ctrl-x>s 命令,既不需要切换输入模式,又可以将当前光标之前的所有相同错误进行更正,这才是该命令的精妙所在。

vim-spell-check

嗯,扫一扫就可以找到小女子我啦~