是否有 Vim 命令来撤消上一个动作,例如<count>j 或 Ctrl-f?

Is there a Vim command to undo the last motion, e.g. <count>j or Ctrl-f?

在Vim中,如果我发出跳转命令,例如G,然后我可以使用Ctrl-o将光标放回跳转前的位置。但是,如果我发出像 40jCtrl-f 这样的移动命令,Ctrl-o 不会将我的光标放回之前的位置,因为它们不会改变跳转列表。是否有命令可以撤消诸如此类的动作?

明确地说,我不是在寻找 "manual" 的答案,例如 40k 让你从 40j 回来,因为这样的命令并不普遍适用于Ctrl-o 的工作方式。

此外,如果没有内置命令执行此操作,那么是否有任何插件执行此操作?

可以用m'设置一个标记,然后用``返回。

您可以覆盖默认动作以提供该功能,如下所示:

" j, k          Store relative line number jumps in the jumplist.
nnoremap <expr> k (v:count > 1 ? "m'" . v:count : '') . 'k'
nnoremap <expr> j (v:count > 1 ? "m'" . v:count : '') . 'j'

还有 reljump plugin,实现相同。

但是,要小心,因为过度使用会降低跳转列表的实用性。因此,我建议不要更改 Ctrl-F / Ctrl-B。