Как мне перейти к определению локальной переменной в Emacs и GNU Global?

Предположим, у вас есть C-код, подобный следующему:

void f1() {
    int var1;

    var1 = 1; // local use of var1
}

void f2() {
    int var1;

    var1 = 2; // local use of var1
}

void f3() {
    int var1;

    var 1 = 3; // local use of var1
}

Как мне перейти к определению локальной переменной с помощью Emacs и GNU Global (gtags.el), указывая на ее локальное использование?

Я пробовал gtags-find-tag (с "var1" в качестве аргумента), и он ничего не находит (похоже, что теги должны быть функциями), и я пробовал gtags-find-symbol, который показывает мне список со всеми тремя определениями var1 (и возможными вариантами использования).

1 ответ

Вам не нужна помощь Global, но это можно сделать как макрос клавиатуры:

  • Запишите текущее слово, в данном случае "var1"
  • Поиск в обратном направлении с использованием функции lisp emacs begin-of-defun
  • Поиск вперед для "var1", это обычно определение var1, так как это первое появление var1 в текущем defun.

Начиная с этого макроса Kerboard, я написал следующую функцию lisp:

(defun bhj-isearch-from-bod (&optional col-indent)
  (interactive "p")
  (let ((word (current-word)))
    (beginning-of-defun)
    (setq regexp-search-ring (cons (concat "\\b" word "\\b") regexp-search-ring))
    (search-forward-regexp (concat "\\b" word "\\b"))))
Другие вопросы по тегам