在< CR>Vim插入模式下重新绑定会产生额外的空间

bq3bfh9z  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(106)

我想增加Vim中撤销命令的粒度。由于undo在每次进入正常模式后都会重置自己,所以我想用<Esc>o替换插入模式中使用的通常的enter(<CR>)。因此,我应该能够撤消一行一行时,写。(是的,我知道我还必须添加<C-g>u,但这是另一个与我的问题无关的问题)。
我在.vimrc中添加了这一行:

inoremap <CR> <Esc>o

然而,在每次输入之后,光标都会向下跳转并向右移动一列(不,在我的vimrc行中没有尾随空格:)。如果我现在再次按回车键,它会直接跳下来,例如。它就留在第二列。但是如果我先写点东西然后按回车键,它会再次跳下一个,向右一个。

djp7away

djp7away1#

你对<C-G>u的直觉是对的。阅读Vim的帮助,从:help i_CTRL-G_u往下看,我们发现下面这个小例子:

:inoremap <CR> <C-]><C-G>u<CR>

这将在每个换行符处启动一个新的撤消块。它还扩展了前面的缩写。
这听起来好像正是你要找的:你可以一行一行地撤销它也不会触发更改模式可能带来的任何(额外)副作用。
我的回答没有解释为什么问题中的Map不起作用。我相信其他用户可以提供一些背景。
作为旁注:当我在Vim 9.0中尝试问题中的Map时,没有插入额外的空间。但是,它也未能按行撤消。

相关问题