我习惯性地使用 ctrl-o 和 ctrl-i 返回旧位置,并返回新位置。如果 ctrl-o 更改文件,我仍然可以 ctrl-I 返回,但我无法再撤消 ctrl-o 之前的最近编辑。是否有设置可以在尝试 ctrl-o 时阻止更改文件?
一个主要使用上下文
我使用以下键映射来格式化段落:
nmap Z {gq}<C-O><C-O>
它用于ctrl-o
将光标定位在重新格式化之前的位置。
如果文件中的第一行非空白,并且光标位于该段落的中间某处,则似乎会{
失败,并且双重<C-O>
会导致光标在跳转列表中跳转得太远,有时会跳转到不同的文件。
如果文件中的最后一行非空,也会出现类似的问题。
普通模式命令gqip
不足以完成此任务,因为它不会将光标放回原处。此外,ctrl-o
不会在 之后将光标放回原处gqip
。
一种非理想的解决方法可能是设置一个要返回的标记,例如,mq
并希望我不会破坏预先存在的标记q
。
答案1
我们不阻止Ctrl-O
更改文件(这会变得Ctrl-O
没那么有用),而是让 Vim 记住所有打开的缓冲区的撤消历史记录。将以下内容放入您的 vimrc 中:
set hidden
此后,您将能够在更改文件后撤消/重做更改。
不仅如此,Vim 还能记住所有撤消历史记录,即使您关闭它并再次打开它也是如此!(前提是文件在关闭 vim 时未被其他程序更改)。这称为“持久撤消”,可以按如下方式激活:
set undofile