imenu里的数据能单独显示在一个窗口里吗?


#1

imenu是emacs自带的一个工具,它能够分析当前缓冲区中的定义。

他基于什么机制分析定义,我不是很清楚(没有去深究,可能是基于正则表达式吧。他似乎能分析racket,其他语言的支持情况我不是很清楚,不过至少能满足我目前的需求)

我的问题是,有没有办法把imenu的数据显示在一个独立窗口里?然后我们可以通过鼠标去点他,就像eclipse等IDE里的outline view功能?

我现在的办法是把他放到菜单栏上,但感觉不是很方便。。。

;; automatically add an Imenu menu to the menu bar
(defun try-to-add-imenu ()
  (condition-case nil (imenu-add-to-menubar "imenu") (error nil)))
(add-hook 'prog-mode-hook 'try-to-add-imenu)

想听听你们的意见


#2

helm的imenu好像就是这样的,以前用过,现在用ivy了,他的imenu就和原生差不多,不过我现在用lsp-ui-imenu也是这个效果,但感觉更好看,而且lsp识别要准确多了


#3

lsp-ui-imenu能有独立outline窗口吗?

就和Eclipse和Visual Studio那样?


#4

是独立一个窗口,但好像并不能用鼠标点


#5

这个 imenu-list 包应该是你想要的


#6

谢谢,已经用上了。

不过这个窗口似乎只能显示在最左边和最右边,能卡到treemac下面去吗?

我所希望的布局:


#7

目前的做法是:

使用imenu-list-minor-mode,然后在Treemacs窗口下,手动打开一个下部窗口,然后再转Ilist,不过每次打开编辑器后都要手动调,不是很方便。

他的imenu-list-smart-toggle不是很智能,只支持:

left, right, above or below, to display the window at the left, right, top or bottom of the frame.。。。


#8

ivy 可以按 C-c C-o,counsel-imenu 和 swiper 都有效,应该是通用的。


#9

同一个作者还有一个包:

这个是专门解决窗口配位置的问题的,可以把你弄好的layout保存下来。

不过我没有用过 ¯\_(ツ)_/¯


#10

treemacs集成了imenu,在对应文件按tab就能够显示outline了。


#11

还真有~~

之前居然一直没发现,感谢!!