如何让Vim的c/、d/、y/命令操作包含目标字符?
哈哈,这个需求太戳我了!刚用Vim的时候我也吐槽过c/的设计——明明c$连行尾都包含,怎么c/xxx就偏偏停在xxx前面,完全反直觉啊!
其实解决起来很简单,利用Vim的可视模式就能完美实现你要的“包含目标字符”的效果,而且能直接适配d和y命令。只需要在你的.vimrc(或者Neovim的init.vim/init.lua里嵌入Vimscript片段)里加几行映射:
nnoremap c/ v/<CR>c nnoremap d/ v/<CR>d nnoremap y/ v/<CR>y
原理解释:
v/xxx<CR>会进入可视模式,自动选中从当前光标位置到**第一个匹配的xxx字符(包含xxx本身)**的所有内容- 紧接着的
c/d/y就会对选中的内容执行修改/删除/复制操作,正好贴合你想要的逻辑
举个你提到的JavaScript例子:假设光标在const foo = bar; console.log(foo);的开头,按c/;,会直接选中const foo = bar;这整段(包括最后的分号),然后立刻进入插入模式让你修改,完全不用额外按键!
如果你还需要支持反向查找(比如向前找某个字符并操作),可以再加对应的反向映射:
nnoremap c? v?<CR>c nnoremap d? v?<CR>d nnoremap y? v?<CR>y
小提示:
要是偶尔需要用原生的“不包含目标字符”的c/行为,只需要先按<C-v>(Ctrl+V),再按c/,就能跳过自定义映射,执行Vim默认的命令啦。
内容的提问来源于stack exchange,提问作者DavidR
相关产品推荐
相关产品推荐

