是否有 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
将光标放回跳转前的位置。但是,如果我发出像 40j
或 Ctrl-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。
在Vim中,如果我发出跳转命令,例如G
,然后我可以使用Ctrl-o
将光标放回跳转前的位置。但是,如果我发出像 40j
或 Ctrl-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。