如何让Vim仅搜索当前行拼写错误?及修改<C-l>绑定实现同行纠错
我来帮你搞定这两个Vim拼写相关的问题:
问题1:让Vim的拼写错误搜索仅针对当前行
Vim默认的[s(跳转到上一个拼写错误)和]s(跳转到下一个拼写错误)是全局遍历整个文档的,要把范围限制在当前行,咱们可以利用Vim命令的范围参数来实现:
- 正常模式下,想找当前行的下一个拼写错误,直接敲命令:
:.,.]s<CR> - 想找当前行的上一个拼写错误,敲命令:
:.,.[s<CR>
要是觉得每次输入命令太麻烦,自定义个映射就方便多了(比如用leader键当前缀):
" 正常模式:跳转到当前行的下一个拼写错误 nnoremap <leader>ns :.,.]s<CR> " 正常模式:跳转到当前行的上一个拼写错误 nnoremap <leader>ps :.,.[s<CR>
这里的.代表当前行,:.,.]s就是告诉Vim:只在当前行这个范围内执行]s的拼写错误搜索操作,完美限制了范围。
问题2:修改绑定使其仅修正当前行的上一个拼写错误
先拆解下原绑定的逻辑,你就能明白怎么改了:
原绑定inoremap <C-l> <c-g>u<Esc>[s1z=]a
<c-g>u:插入一个撤销标记,方便后续单独撤销这次修正操作<Esc>:切换到正常模式[s:全局搜索上一个拼写错误(这就是咱们要改的地方)1z=:直接选择第一个拼写修正建议]a:自动回到之前的插入位置,不用手动移动光标<c-g>u:再插一个撤销标记,让撤销更灵活
要让它只修正当前行的错误,核心就是把全局搜索的[s改成仅当前行范围内的上一个拼写错误搜索。对应的命令是:.,.[s<CR>,把原绑定里的[s替换成这个就行。
修改后的最终绑定:
inoremap <C-l> <c-g>u<Esc>:.,.[s<CR>1z=`]a<c-g>u
这样调整后,每次按<C-l>时,Vim只会在当前行里找上一个拼写错误并修正,再也不会跳到其他行去啦。
内容的提问来源于stack exchange,提问作者Kevin Liu
相关产品推荐
相关产品推荐

