我想增加Vim中撤销命令的粒度。由于undo在每次进入正常模式后都会重置自己,所以我想用<Esc>
和o
替换插入模式中使用的通常的enter(<CR>
)。因此,我应该能够撤消一行一行时,写。(是的,我知道我还必须添加<C-g>u
,但这是另一个与我的问题无关的问题)。
我在.vimrc
中添加了这一行:
inoremap <CR> <Esc>o
然而,在每次输入之后,光标都会向下跳转并向右移动一列(不,在我的vimrc行中没有尾随空格:)。如果我现在再次按回车键,它会直接跳下来,例如。它就留在第二列。但是如果我先写点东西然后按回车键,它会再次跳下一个,向右一个。
1条答案
按热度按时间djp7away1#
你对
<C-G>u
的直觉是对的。阅读Vim的帮助,从:help i_CTRL-G_u
往下看,我们发现下面这个小例子:这将在每个换行符处启动一个新的撤消块。它还扩展了前面的缩写。
这听起来好像正是你要找的:你可以一行一行地撤销它也不会触发更改模式可能带来的任何(额外)副作用。
我的回答没有解释为什么问题中的Map不起作用。我相信其他用户可以提供一些背景。
作为旁注:当我在Vim 9.0中尝试问题中的Map时,没有插入额外的空间。但是,它也未能按行撤消。