怎么给特定的major mode禁用lsp?

我在用的一个叫qml-mode的major mode是从js-mode derive出来的

我给js-mode的hook加了lsp之后,在启动qml-mode的时候lsp也会自动打开导致满屏的的flycheck error

试过在qml-mode的hook上把lsp flycheck关掉,但是好像没什么用。 有没有什么好一些的workaround?我现在的临时方案是把js-mode的lsp禁用了

我用的方法是

(add-hook 'python-mode-hook
          (lambda ()
            (unless (string-match "\.sage$" (buffer-file-name))
              (eglot-ensure))))

避免python mode derive的sage mode启用lsp。用lsp-mode的话eglot-ensure要换成lsp-mode?(我不用lsp-mode不清楚)

不知道有没有更好的方法。


更新:修复edge case

(add-hook 'python-mode-hook
          (lambda ()
            (when (and buffer-file-name
                       (not (string-match "\.sage$" (buffer-file-name))))
              (eglot-ensure))))
1 个赞
(defun +js/lsp ()
  (unless (member major-mode '(qml-mode))
    (lsp)))

(add-hook 'js-mode-hook '+js/lsp)

Cool. 看着挺好的。我回去加上。