如何在开启lsp的情况下单独设置 imenu-create-index-function

使用 go-imenu 设置 go-mode 的 imenu 时, 意外的发现 imenu-create-index-function 已经被 lsp-mode 修改了. 像这样如果两个 hook 同时修改某个变量, 如何指定顺序呢? 或者如何在 go-mode 中把 lsp-imenu 关掉?

lspmode是如何开启的呢?

应该是go-mode-hook的作用吧!

你只需要在打开lspmode的时候再次设置那个变量就可以了。

我单独写了一个函数 foo, 先开 lsp, 再开 go-imenu, 然后加给 go-mode-hook, 结果 imenu-create-index-function 还是不对. 如果不开 lsp, 只把 go-imenu 加到 go-mode-hook 里, 这个变量就是正常的.

可能是因为go-imeun并不设置 imenu-create-index-function

你应该试试用setq设置

试试这个方法,这里的 js2-imenu-make-index 函数是我自己定义的 create-imenu-index 函数

(defun my-js2-mode-hook ()
  (progn

    (setq imenu-create-index-function 'js2-imenu-make-index)
))

(add-hook 'lsp-after-open-hook 'my-js2-mode-hook)

啊, 这个 lsp-after-open-hook 确实是我需要的. 谢谢!