Vim 仅替换插入模式中的更改

Vim 仅替换插入模式中的更改,vim,range,Vim,Range,在我的vimrc中,我在退出insert模式时放置了一个代码来自动替换,如下所示: augroup SubstWhenLeavingInsert autocmd! autocmd InsertLeave *.tex %s/a/b/ge augroup END 这没有问题。但我寻求一种更有效的方法:上面的autocmd总是在全文中搜索 我是否可以将%替换为一个范围,该范围指示“插入模式下的编辑位置” 我想我可以用记号笔来做这件事,但我对记号笔不太确定。因此,请告诉我我的猜测是否正确,或者

在我的vimrc中,我在退出insert模式时放置了一个代码来自动替换,如下所示:

augroup SubstWhenLeavingInsert
  autocmd!
  autocmd InsertLeave *.tex %s/a/b/ge
augroup END
这没有问题。但我寻求一种更有效的方法:上面的autocmd总是在全文中搜索

我是否可以将
%
替换为一个范围,该范围指示“插入模式下的编辑位置”

我想我可以用记号笔来做这件事,但我对记号笔不太确定。因此,请告诉我我的猜测是否正确,或者如何实现它。

可以通过和标记访问先前更改(或拖动)的文本。它可能不会直接对应于实际的更改(并且像
:w
这样的命令会标记整个缓冲区),但是由于您只是在这里寻找一个优化,所以这样就可以了

  autocmd InsertLeave *.tex '[,']s/a/b/ge

您可以使用
'[
']
标记。但是,只有在插入模式下没有使用光标移动命令时,这才有效。由于您的示例过于简化(我不相信您如此讨厌字母
a
),因此不可能看出哪种方法最好。您没有使用
:iabbrev
解决此问题有什么原因吗?谢谢您的回答。虽然在评论中提到了这个解决方案,但我认为第一个答案是最好的答案。