Vim:使用相对数字移动并将其添加到跳转列表以供 CTRL-O 使用

Vim:使用相对数字移动并将其添加到跳转列表以供 CTRL-O 使用

我启用了相对数字,经常按 25k 或 7j 等键导航到特定行。问题是,在更改行之后,我经常发现自己想回到移动之前的位置。因此我按 CTRL-O,但失败了,因为 j/k 移动未添加到移动历史记录中。相反,我似乎向后移动了两次。

理想的情况是,每当我使用乘数执行 j/k 运算时,Vim 都会将其添加到移动历史记录中。这可能吗?

答案1

j以下是实现此目的的/映射k

:nnoremap <silent> k :<C-U>execute 'normal!' (v:count > 1 ? "m'" . v:count : '') . 'k'<CR>
:nnoremap <silent> j :<C-U>execute 'normal!' (v:count > 1 ? "m'" . v:count : '') . 'j'<CR>

图片来源:我第一次看到这个这里

答案2

我不相信 Vim 提供了任何方式来向跳转列表添加动作,但如果你真的希望能够跳回''并将动作视为跳跃,你可以执行以下操作:

function! MarkJ()
    mark '
    return "j"
endfunction

nnoremap <expr> j MarkJ()

MarkJ()手动设置'标记,将该行添加到跳转列表(但始终位于第 0 列),然后返回j到映射。不幸的是,您必须对每个动作都执行相同的操作。

我想不出任何方法可以轻易地将其限制为具有乘数的运动,但按照getchar()下面的示例:help map-expr,理论上可以定义一组函数和映射,只有MarkX()当运动遵循乘数时才会调用。不过,这是相当做作的,而且可能会变得非常昂贵,从而降低性能。

相关内容