如何使用Emacs和GNU Global转到局部变量的定义?

时间:2012-09-05 21:12:40

标签: 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 个答案:

答案 0 :(得分:3)

您不需要Global的帮助,但可以将其作为键盘宏来完成:

  • 记下当前的单词,在这种情况下为“var1”
  • 使用emacs开始 - defun lisp函数向后搜索
  • 向前搜索“var1”,这通常是var1的定义,因为它是当前defun中var1的第一次出现。

从这个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"))))