emacs 有能跳转到任意 tag 的命令么?

如图, vim 可以很方便地跳转到任何 tag, 用 :tjump 命令, 想问问 citre 是否有类似的命令? 或者不限于 citre, 任何命令皆可? 我很喜欢 consult 的预览功能, 如果能像 consult 那样搜索 tag 并且预览那就更好了.

我发现好几个命令都可以, counsel-etags-find-tag, helm-gtags-find-tag, projectile-find-tag, 不过和 consult 比起来它们无法预览, 和 citre 比起来, 它们不会显示这是哪一类的方法. 举例子: 这是 projectile-find-tag 的结果:

这是 citre 的结果:

比较起来, citre 会显示方法所在的类.

但是 citre 好像又不能直接跳转到某一个 tag, 只能跳转到当前光标所在的 tag.

你可以给counsel-etags提bug,我考虑一下支持类该怎么做。

counsel-etags支持反模式, 在counsel的界面里输入 !key1 key2, key1 key2在感叹号之后,可以把排除含有key1 key2的选项。

1 个赞

etags 的格式太古老了,能显示的信息太少,远不如现代版的 ctags 格式好用。vim 对现代版的 ctags 的格式支持就很好,啥都能看。我觉得楼主自己操刀实现一个 consult-citre 的后端应该是最好的解决方案。

vim 的 ctags 我也没觉得那么香啊, 这是我显示的效果, 也就这些信息, 你还有啥?

我觉得增加一个 parent tag 的功能非常有用, 比如 c++ 或者 python, 不同的 class 可能有同名的方法, 如果能在搜索中再增加一个 parent tag, 也就是 class name, 跳转到不同 class 的同一方法就非常方便了. 比如某个手写神经网络项目里不同的层都定义了 forward, backward 方法, 用 counsel-etags-list-tag 无法知道它是哪个 class 的方法.

我刚开始使用 counsel-etags, 有个疑惑: 是不是必须加上 -e 选项?

(setq counsel-etags-update-tags-backend (lambda (src-dir) (shell-command "/usr/local/bin/ctags -R")))

这样完全搜不出来 tag. 可能是我习惯了 ctags, 用 etags 感觉没有 ctags 方便, 具体说起来:

  • 它包含了引用信息, 但实际上我并不关心, 我只希望快速跳转到定义, 如果要看引用, 我可以直接用 consult-grep 之类的
  • 它损失了 parent tag 信息, 而 不加 -e 选项是不会损失这个信息的.

vim 悬浮窗口这个特性已经领跑做了示范啊。配合索引插件,既能满足像 citre 一样弹出预览,又能利用 counsel / consult 模糊搜索 tags,希望 Emacs 也能有。

插件是 Leaderf

1 个赞