Большую часть времени я читаю код и перехожу от функции к функции, моделируя стек вызовов. Как только я доберусь до сути, мне нужно вернуться назад, чтобы увидеть, как обрабатываются возвращаемые значения, но часто я забывал, какая функция (приблизительно 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 ответ1

1

Знаете ли вы :help jumplist?

Каждый поиск (с / , и n/N), а также другие движения (которые охватывают более короткое расстояние, поэтому j , w и т.д. Отсутствуют) добавляет туда запись, и вы можете вернуться назад с помощью <C-O> и вперед снова с <C-I> (который совпадает с <Tab>).

Вы также можете явно установить точку перехода через m' .

И теги

Поскольку ваш вариант использования - это навигация по стеку вызовов, я также хотел бы выделить связанный стек тегов. Сначала нужно создать базу данных определений функций (ctags поддерживает много языков программирования), а затем есть команды для поиска тегов, переходов и возврата в стек. (Все это также записывается как обычные прыжки.) Смотрите :help tags для деталей.

Продвинутый этап

Вам, вероятно, не нужно это как новичку, но плагины, такие как мой плагин EnhancedJumps, расширяют встроенный список переходов переходами, которые остаются внутри текущего буфера, или наоборот, непосредственно переходят к следующему месту в другом буфере.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .