VIM:将跳转列表限制为特定的跳转命令

3

Vim默认的跳转历史记录包含以下命令:

以下命令为“跳转”命令:'、'`、G、/、?、n、N、%、(、)、[[、]]、{、}、:s、:tag、L、M、H以及开始编辑新文件的命令。

然而,我感觉这么多的“跳转”命令会让跳转历史记录包含超出我的需求。例如,我使用cscope从函数调用处跳转到函数实现处,然后在实现中,我可能使用%跳转到匹配的括号,或使用/搜索特定内容。然而,我希望跳转历史记录只保留cscope的跳转历史记录,这样我可以轻松返回调用点。

有没有办法排除某些动作不纳入到跳转历史记录中?


2
我认为您需要的是标签堆栈,而不是跳转列表。请参阅 :help tagstack - romainl
当我按下 Ctrl+T 或者使用 pop 返回到之前的位置时,tagstack 能够正常工作。但是当我尝试使用 "tag" 时,它会提示我 E433: no tag file fileE426: tag not found - Eric Sun
2个回答

2
如果您使用的是普通的ctags而不是cscope,则可以通过:help tagstack内置此功能;在跳转列表中相当于<C-O>的是标签堆栈中的<C-T>:help cscope-intro提供了以下内容:

cscope查询结果与常规标签一样,因此您可以像使用常规标签(Ctrl-]或:tag)一样跳转到它们,然后通过使用Ctrl-T弹出标签堆栈来返回。(请注意,如果没有重新映射这些命令或设置选项,则不能仅通过执行Ctrl-]或:tag来跳转到cscope标记。)

我认为这意味着,如果您正确使用cscope接口,则<C-T>应该完全正常工作,但为了使标签查找更加方便,您需要构建自己的快捷方式到cscope接口。

我目前遇到的问题是,使用 tagstack 可以跳转到上一个 cscope 位置,但我找不到使用 tag 命令向前跳转的方法,它提示我没有标签文件。 在 cscope 帮助文档中,我仍然不太理解“重新映射这些命令或设置选项”,这里的“选项”是什么? - Eric Sun
我在这篇帖子的帮助下找到了解决方案。除了生成cscope.out之外,还需要使用ctags -L cscope.files来生成标签条目。有了这两个工具,现在我可以在tagstack中双向移动了。 - Eric Sun

0
理论上说,建议使用标签堆栈(tagstack)而不是跳转列表(jumplist),就像@Ingo Karkat所建议的那样。然而,如果您没有离开函数,我认为只需要使用 [[[m回到函数定义会更简单。如果您知道您将回到它,那么我建议打开一个新窗口(例如::split<c-w>s)或设置一个(文件)标记(例如:mmmM)。

如果只是跳一层,打开分割窗口还可以,但是如果函数调用有多层,窗口会变得越来越小,无法显示足够的代码。 - Eric Sun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接