Vim - 一次移动多行时跳回之前的位置

Das*_*San 2 vim list line

当我使用 Vim 时,我经常在移动线条时使用动作命令。
例如,如果我想向下移动 20 行,我按20j
现在,在“跳”了 20 行之后,如果我想再次回到之前的位置,我必须输入20k

有没有办法不用打字就跳到以前的位置20k
例如,通过某种方式将前一个位置添加到 Vims 跳转列表中,然后我可以用来<c-o>跳回来。

(顺便说一句,我只想在一次移动超过一行时跳回来)。

rom*_*inl 5

这里的问题是 和j不是k“跳跃”。当你这样做时,20j你确实在做jjjjjjjjjjjjjjjjjjjj,但速度很快,所以你必须将这些随意的动作变成适当的跳跃才能<C-o>工作。如何执行此操作的说明如下:help jumplist

您可以通过将 ' 标记设置为“m”来显式添加跳转。

在实践中:

m'20j
Run Code Online (Sandbox Code Playgroud)

然后<C-o>''``返回。

不过,还有更聪明的移动方法,它们不需要您计算行数,而是实际的跳跃,例如:help /:help ?


Ser*_*ujo 5

我的~/.vimrc文件中有以下内容:

" It adds motions like 25j and 30k to the jump list, so you can cycle
" through them with control-o and control-i.
" source: https://www.vi-improved.org/vim-tips/
nnoremap <expr> j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj'
nnoremap <expr> k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk'
Run Code Online (Sandbox Code Playgroud)

在我的例子中,大于 5 行的行移动被添加到跳转列表中。