如何在没有在Emacs中查询的情况下跳转到定义?

时间:2014-05-16 06:23:44

标签: emacs tags elisp etags

在Emacs中使用Etags时遇到问题。每次我点击\ M +。要跳转到一个定义点,总是会弹出一个查询,例如:

  

查找标记(默认function_name):

我必须点击“输入”#39;确保它。

但在大多数情况下,我发现我可以选择默认值。那么有什么方法可以抑制这个消息吗? 我发现原因是因为: (defun find-tag (tagname &optional next-p regexp-p) (interactive (find-tag-interactive "Find tag: ")) ... )

为什么我要选择标签?为什么默认值不能仅仅是这一点下的单词?我可以删除这一行吗? (交互式),还是有一个很好的解决方案?

2 个答案:

答案 0 :(得分:0)

通过Emacs令人敬畏的C-h f很快通过etags源中的一些defuns,可以发现搜索的默认标签是通过名为find-tag-default的函数确定的。

这意味着你可以定义以下功能:

(defun find-tag-under-point ()
  (interactive)
  (find-tag (find-tag-default)))

然后,您可以通过define-keyglobal-set-keylocal-set-key将其绑定到您想要的任何键。

(如果您希望函数成为"命令"可以使用interactive调用或绑定到密钥,则始终需要M-x表单。)

答案 1 :(得分:-1)

您可以在find-tag(或同样的任何互动功能)上编写自己的功能

(defun find-tag-under-point (&optional arg)
  (interactive "P")
  (cond ((eq arg 9)
     (let ((current-prefix-arg nil))
       (call-interactively 'find-tag)))
    (arg
     (call-interactively 'find-tag))
    (t
     (find-tag (find-tag-default)))))

(global-set-key (kbd "M-.") 'find-tag-under-point)

然后热键 C-9 M - 。像往常一样调用find-tag(旧函数),但find-tag-under-point的行为(new-函数)默认是你想要的。