很多时候,我都在阅读代码,逐个函数地查看,模拟调用堆栈。一旦我找到最底层,我就需要逆向思考,看看返回值是如何处理的,但很多时候我都忘记了调用了哪个函数(大约 10 次调用)或它在文件中的哪个位置。
我最近发现我可以使用(正斜杠向上箭头)浏览查找历史记录/^
。这很管用,但并不总是能得到我想要的结果。
有没有办法按顺序“标记”位置列表,以便我可以沿任一方向浏览它们?例如:
- 线路 100 -
read_desc
呼叫desc_read_dev
- 1200 号线 -
desc_read_dev
呼叫dev_read
- 200 号线 -
dev_read
呼叫out
- 第 10 行 -
out
返回EOK
然后我想把 EOK 带回去dev_read
看看那里发生了什么,然后再带回去desc_read_dev
等等。
答案1
你知道吗:help jumplist
?
每次搜索(使用/
、 和n
/ N
)以及其他动作(覆盖超过短距离,因此j
、w
等不适用)都会在那里添加一个条目,您可以使用 返回<C-O>
,然后使用 再次前进<C-I>
(与 相同<Tab>
)。
您还可以通过 明确设置跳转点m'
。
和标签
由于您的用例是通过调用堆栈导航,因此我还想强调相关的标签堆栈。您需要先生成一个函数定义数据库(ctags
支持多种编程语言),然后有标签查找、跳转和返回堆栈的命令。(所有这些也记录为常规跳转。)请参阅:help tags
了解详情。
高级阶段
作为初学者,你可能不需要这个,但是像我的这样的插件EnhancedJumps 插件使用停留在当前缓冲区内的跳转来扩展内置跳转列表,或者相反,直接跳转到另一个缓冲区中的下一个位置。