将位置推送到跳转列表

Rom*_*aka 5 vim vim-plugin

我的vim插件有一个跳转到不同位置的命令(就像标签一样).

我使用的cursor功能.

如何在跳转列表中记录以前的位置,以便Ctrl+O按预期工作?

rom*_*inl 6

:help cursor() 不能更清楚:

[…]
Does not change the jumplist.
[…]
Run Code Online (Sandbox Code Playgroud)

(编辑)

这意味着cursor()跳转不会记录在跳转列表中,因此,这cursor()是一个不合适的工具.

(EndEdit中)

作为替代方案,你可以使用类似的东西

execute "normal " . target_line . "G" . target_col . "|"
Run Code Online (Sandbox Code Playgroud)

这是完全兼容的,<C-o>并且<C-i>正如惯用的那样

call cursor(target_line,target_col)
Run Code Online (Sandbox Code Playgroud)

即使它给JavaScripters带来了寒意;-)

  • 这确实很清楚,但它没有回答我的问题。我没有问如何*不*更改跳转列表!关于你的第二个建议,我会记住它,尽管我更喜欢正确的 API 调用。 (2认同)
  • OP没有问如何使cursor()表现不同,他们问如何强制记录以前的位置,这个答案没有回答问题。这是一件有用的事情,也是为什么我的 Google 搜索让我来到这里,尽管“cursor()”不是我搜索的一部分。使用更具可读性的代码,即使对于 vim 专家来说,也不是一件坏事。 (2认同)

小智 5

我本人也想这样做,对我有用的是在光标移动之前将其标记为`。

normal! m`
call cursor(l, c)
Run Code Online (Sandbox Code Playgroud)

如帮助所示,setpos()和cursor()都不会修改跳转列表,所以setpos()和cursor()有什么区别,很奇怪!