Как мне перейти к определению локальной переменной в 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"))))