Vim:撤消imap后恢复光标位置

时间:2012-07-24 06:23:53

标签: vim undo cursor-position

我修改了IMAP vim-latex函数,以便通过将LookupCharacter的最终返回行更改为

来撤消操作
return a:char . "^Gu\<bs>" . bs . IMAP_PutTextWithMovement(rhs, phs, phe)

现在直接从插入模式进行撤消,我在.vimrc

中有这个映射
imap <Undo> <Esc>ui

我使用Neo2 keyboard layout,因此第4层有一个撤消键。

现在这个效果相当不错,但问题是当我在一行的末尾使用它时,光标位于之前最后一个字符。要在没有vim-latex的情况下进行测试,您可以执行

:imap a a^Gu\<bs>test

在行的中间和末尾键入“b”,然后通过快捷方式或手动按<Esc>ui执行撤消。

那么有没有办法让vim跳回到正确的光标位置?

我看过an entry in wikia提出了一个想法,但我不知道如何使用imap映射来实现它。

1 个答案:

答案 0 :(得分:1)

光标移动是由于在映射结束时不加区别地使用i。通常,通过

暂时执行正常模式命令
imap <Undo> <C-\><C-o>u

但是在你的情况下,当撤消修改缓冲区时,这可能在所有情况下都不起作用。