python跟typescript都配置了相应的lsp-mode,但是只要打开一个*.py
接着打开一个*.ts
,那么ts的解析就会挂掉,因为lsp拿着python的后端去解析*.ts
。反之亦然。截图、配置分别如下:
截图:右边的ts代码坏掉了,到处都是报错。报错信息里带有pycodestyle
等字眼,应该是把ts当python来解析了
配置如下:
;; flycheck语法检查器
(require-package 'flycheck)
;; lsp mode
(require-package 'lsp-mode)
(lsp-mode t)
(require-package 'lsp-ui)
(add-hook 'lsp-mode-hook 'lsp-ui-mode)
(define-key lsp-ui-mode-map [remap xref-find-definitions] #'lsp-ui-peek-find-definitions)
(define-key lsp-ui-mode-map [remap xref-find-references] #'lsp-ui-peek-find-references)
(add-hook 'typescript-mode-hook 'flycheck-mode)
(add-hook 'web-mode-hook 'flycheck-mode)
;; ts的配置
(require-package 'lsp-javascript-typescript)
(require 'lsp-typescript)
(add-hook 'typescript-mode-hook #'lsp-typescript-enable) ;; for typescript support
(add-hook 'js-mode-hook #'lsp-typescript-enable)
(add-hook 'web-mode-hook #'lsp-typescript-enable) ;; *.tsx
(add-hook 'js2-mode-hook #'lsp-typescript-enable) ;; for js2-mode support
(add-hook 'rjsx-mode #'lsp-typescript-enable) ;; for rjsx-mode support
;; python的配置
(lsp-define-stdio-client lsp-python "python"
(lsp-make-traverser #'(lambda (dir)
(when (directory-files dir nil ".git") ;hardcode,只有项目root目录才可以是python root
(directory-files
dir
nil
"\\(__init__\\|setup\\)\\.py"))))
'("pyls"))
(add-hook 'python-mode-hook #'lsp-python-enable)