大概意思就是当前源文件有很多函数的实现,但是我又不确定要找的功能函数会是什么名字,想有个列表可以一眼看到函数签名列表,猜测各个函数的大概用途,再跳转过去细看会否是我想要的。
我在用doom,触发SPC-s-i (counsel-imenu
),或者M-x lsp-ui-imenu
,出现的函数列表都是根据lsp是否编译到来确定的,如果当前源文件是下面这样:
#if 0
void foo() {
...
...
}
#endif
int bar() {
...
...
}
则两者的函数列表里都会看不见foo()
,只会看见bar()
,我知道这样也没什么不妥,但是对我来说,我想知道这个源文件的所有函数,而不仅仅是会被编译到的函数。
希望我有表达清楚,请大家不吝赐教。
ksqsf
2
那别用 lsp 提供的 imenu 就行了。用 cc-mode 自带的。
定制imenu很简单,本质就是设置imenu-create-index-function
, 以下是adoc-mode
设置,
(defun adoc-imenu-index ()
"Set up imenu for `adoc-mode'."
(let* ((patterns '((nil "^=\\([= ]*[^=\n\r]+\\)" 1))))
(save-excursion
(imenu--generic-function patterns))))
(defun adoc-mode-hook-setup ()
"Set up `adoc-mode'."
;; Don't wrap lines because there is table in `adoc-mode'.
(setq truncate-lines t)
(setq imenu-create-index-function 'adoc-imenu-index))
(add-hook 'adoc-mode-hook 'adoc-mode-hook-setup)