4

我想find-tag自动接受默认选项(即点的单词)并在没有提示的情况下跳转到标签位置。

这可能吗?

我也在使用 Emacswiki 的 find-tag 的建议版本,在匹配的情况下重新运行 ctags。所以我想要这样的东西:

is current word a known tag?
-> yes: jump to it without further confirmation
-> no: rerun ctags
is it known now?
-> yes: jump to it without further confirmation
-> no: prompt user for input

谢谢!

4

5 回答 5

6

这是 Google 上“查找标签 emacs 无提示”的热门歌曲之一。对于那个简单的版本 - 没有海报提到的 ctag-regeneration 逻辑 - 似乎关键是:

(find-tag (find-tag-default))

所以,对我来说,这有效:

(defun find-tag-no-prompt ()
  "Jump to the tag at point without prompting"
  (interactive)
  (find-tag (find-tag-default)))
;; don't prompt when finding a tag
(global-set-key (kbd "M-.") 'find-tag-no-prompt)
于 2014-07-22T22:49:21.810 回答
2

这是我的 ctags 设置,对我来说很棒。我从这里借来的。

(require 'eproject)
(require 'etags-select)

(defun build-ctags ()
  (interactive)
  (message "building project tags")
  (let ((root (eproject-root)))
    (shell-command
     (concat "ctags-exuberant -e -R --extra=+fq --exclude=db --exclude=test --exclude=.git --exclude=public -f " root "TAGS " root)))
  (visit-project-tags)
  (message "tags built successfully"))

(defun visit-project-tags ()
  (interactive)
  (let ((tags-file (concat (eproject-root) "TAGS")))
    (visit-tags-table tags-file)
    (message (concat "Loaded " tags-file))))

(defun hbin-find-tag ()
  "Borrow from http://mattbriggs.net/blog/2012/03/18/awesome-emacs-plugins-ctags/"
  (interactive)
  (if (file-exists-p (concat (eproject-root) "TAGS"))
      (visit-project-tags)
    (build-ctags))
  (etags-select-find-tag-at-point))

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

PS:你可能需要这些:

git://github.com/jrockway/eproject.git
git://github.com/emacsmirror/etags-select.git
于 2012-08-22T14:26:37.440 回答
2

好吧,我找到了一个 hack-y 解决方案:

;; auto jump
(global-set-key (kbd "C-x C-M->") 'find-tag) ; bind to some unused placeholder
(global-set-key (kbd "M-.") (kbd "C-x C-M-> <return>"))

首先将 find-tag 绑定到一些您永远不会使用的虚拟绑定(此步骤是避免无限循环所必需的)。然后绑定M-.到这个新的绑定 + <return>

丑陋,但有效......如果有人有更好的答案(包括原始问题中描述的失败搜索的处理),我会留下这个问题。

于 2012-08-23T07:50:11.703 回答
0

这是一个稍微修改过的版本,可以加载依赖的 gem(在 ruby​​ on rails 中很有用)

  (defun build-ctags ()
      (interactive)
      (message "building project tags")
      (let ((default-directory (eproject-root)))
        (shell-command (concat "exctags -e -R --extra=+fq --exclude=db --exclude=test --exclude=.git --exclude=public -f TAGS * " (trim-string (shell-command-to-string "rvm gemdir")) "/gems/*"))
        (visit-project-tags)
        (message "tags built successfully")))
于 2013-03-20T17:47:55.410 回答
0

Emacs 25 默认执行此操作。M-.( xref-find-definitions) 跳转到定义并且M-,( xref-pop-marker-stack) 弹回。

于 2018-05-21T04:46:56.370 回答