vim - 如何使 vim 拼写错误仅搜索当前行?
问题描述
这个 vim 绑定将<C-l>
纠正之前的拼写错误:
inoremap <C-l> <c-g>u<Esc>[s1z=`]a<c-g>u
如何修改它以使其仅纠正当前行上的先前错误?
解决方案
Stack Exchange 上提供了此答案的更短更好的版本。想法是一样的,但执行更好。
虽然当前的解决方案有效,但上面链接中的答案完全重用了原始映射。
原答案如下
我一直在修改您的映射的不同版本,几乎想出了一个需要添加到您的配置文件中的好解决方案(尽管它很不雅),如下所示:
function! FixLastSpellCurrentLine()
let s:linenum1 = line('.')
execute 'normal ms[s'
let s:linenum2 = line('.')
execute 'normal `s'
if s:linenum1 == s:linenum2
execute 'normal ms[s1z=`sl'
endif
let s:islastchar = col(".") == col("$")-1
if s:islastchar
:startinsert!
else
execute 'normal h'
:startinsert
endif
endfunction
imap <C-l> <esc>:call FixLastSpellCurrentLine()<CR>
这可能在所有情况下都不像你所期望的那样有效,但这已经足够接近了,我觉得它可能会激励你或其他人改进它。这个想法只是检查以前的拼写错误发生在哪里并比较行。我认为这可以或多或少地按照这些思路来实施,但我仍然不相信这个解决方案是理想的。
它能做什么:
- 从您当前的光标位置,它进入正常模式并调用定义的函数。
- 然后它将当前行的值存储到
s:linenum1
. - 它用标记当前位置
ms
并跳转到文件中发现的上一个拼写错误(如果有)。 - 从那里,它再次捕获行号
s:linenum2
以查看它是否不同。 - 它会回到原来的位置并确定该行是否已更改。如果它发生了变化,它将返回到光标所在位置的插入模式,并且如果它发生在另一行,则不会更正任何拼写错误。
- 如果它没有改变,它将更正拼写错误并返回光标原来的位置。
推荐阅读
- node.js - 无法读取空错误的属性“名称”
- julia - 如何从 Julia 的两个文件中一次读取一行?
- youtube-api - Youtube 数据 API 减少到每天的零查询(审核/表格)
- xamarin.forms - Xamarin - HttpClient,在 iOS 和服务器之间建立连接
- iis - IIS - 临时配置文件覆盖 DefaultAppPool.config
- python-3.x - 严重的菜鸟需要帮助 PYTHON
- java - java.lang.NullPointerException:使用 RecyclerView.Widget 时出错
- java - 我可以连接到 MongoDB,但是当我使用 iterable.iterator() 创建游标时,我得到 com.mongodb.MongoTimeoutException
- android - 我怎样才能摆脱这个大的lib文件
- javascript - 在 botframework 网络聊天中发送消息(来自建议)后,如何清除聊天输入框?