跑个题想问一下图里的是什么字体?多谢
霞鹜文楷
请教个问题, 如何手动开启 python 的语法补全? 事情是这样的, 我有多个后缀名不是 .py 的 python 文件, 例如 test.a, test.b, 打开文件后无法使用语法补全. 如何手动开启?
直接进入python-mode就好了
test.a, test.b 没有问题. 但如果是没有后缀, 比如说 test, 进入 python-mode 就会报错了.
[LSP-Bridge] handle_register_capability_message {’jsonrpc’: ’2.0’, ’id’: ’5’, ’method’: ’client/registerCapability’, ’params’: {’registrations’: [{’id’: ’5f29f398-d260-4ea1-b9e6-14be39d57694’, ’method’: ’textDocument/formatting’}]}}
我发现一个jdtls格式化代码的bug
@@ -892,7 +892,7 @@ class LspServer:
workspace_watch_files = self.parse_workspace_watch_files(message["params"])
self.monitor_workspace_files(workspace_watch_files)
log_time("Add workspace watch files: {}".format(workspace_watch_files))
- elif registration["id"] == "textDocument/formatting":
+ elif registration["method"] == "textDocument/formatting":
self.code_format_provider = True
elif registration["id"] == "textDocument/rangeFormatting":
self.range_format_provider = True
已经修复了, 感谢反馈
报什么错?
提示说是 Wrong type argument: number-or-marker-p, nil.
toggle-debug-on-error
Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
+(nil 1)
(substring filename (+ (cl-position 46 filename) 1) (length filename))
(and t (substring filename (+ (cl-position 46 filename) 1) (length filename)))
(let* ((file-extension (and t (substring filename (+ (cl-position 46 filename) 1) (length filename)))) (langserver-info (and file-extension (cl-find-$
lsp-bridge-get-lang-server-by-extension("/home/eric/documents/test" ((("vue") . "volar_emmet") (("ts") . "typescript_eslint") (("tsx") . "typescriptr$
lsp-bridge-get-multi-lang-server-by-extension("/home/eric/documents/test")
(or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))
(let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))$
(if filename (let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mo$
(let* ((filename (and t (or (condition-case nil (progn (file-truename ...)) (error nil)) (if (lsp-bridge-is-remote-file) (progn lsp-bridge-remote-fil$
(cond ((and lsp-bridge-enable-org-babel (eq major-mode 'org-mode)) (set (make-local-variable 'acm-is-elisp-mode-in-org) nil) (lsp-bridge-org-babel-ch$
lsp-bridge-has-lsp-server-p()
(or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode 'org-mode) (not (lsp-bridge-is-org-temp-buffer-p))))
(if (or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode 'org-mode) (not (lsp-bridge-is-org-temp-buffer-p)))) (progn (if$
(if (or (equal (buffer-name (current-buffer)) acm-buffer) (equal (buffer-name (current-buffer)) acm-doc-buffer)) nil (if lsp-bridge-disable-backup (p$
lsp-bridge--enable()
(if lsp-bridge-mode (lsp-bridge--enable) (lsp-bridge--disable))
(let ((last-message (current-message))) (setq lsp-bridge-mode (cond ((eq arg 'toggle) (not lsp-bridge-mode)) ((and (numberp arg) (< arg 1)) nil) (t t$
lsp-bridge-mode(1)
(progn (lsp-bridge-mode 1))
(if (cl-every #'(lambda (pred) (lsp-bridge-check-predicate pred "global-lsp-bridge-mode")) lsp-bridge-enable-predicates) (progn (lsp-bridge-mode 1)))
#f(lambda () [t] (if (cl-every #'(lambda (pred) (lsp-bridge-check-predicate pred "global-lsp-bridge-mode")) lsp-bridge-enable-predicates) (progn (lsp$
run-hooks(change-major-mode-after-body-hook prog-mode-hook python-base-mode-hook python-mode-hook)
apply(run-hooks change-major-mode-after-body-hook (prog-mode-hook python-base-mode-hook python-mode-hook))
run-mode-hooks(python-mode-hook)
python-mode()
funcall-interactively(python-mode)
call-interactively(python-mode record nil)
command-execute(python-mode record)
counsel-M-x-action("python-mode")
ivy-call()
ivy-read("M-x " #<obarray n=36191> :predicate #f(compiled-function (sym) #<bytecode 0x1b96d1dc257f7be1>) :require-match t :history counsel-M-x-histor$
counsel-M-x()
funcall-interactively(counsel-M-x)
call-interactively(counsel-M-x nil nil)
command-execute(counsel-M-x)
你这个是文件名没有扩展名导致的, 你为啥要打开一些内容是python但是没有.py扩展名的文件?
lsp-bridge根据扩展名来推测你应该用什么 lsp server,没有扩展名, lsp-bridge 也不知道怎么判断。
有些时候还是会遇到像 test 和 test.a 这种文件的, 不能自动识别所以需要手动开启 python-mode.
我今天试了一下, 没有扩展名的文件, 直接用 python-mode 进入, lsp-bridge 可以正常工作。
你是用 emacs -Q 测试的吗?
现在是 emacs -Q 的测试结果, 貌似一样.
Debugger entered–Lisp error: (wrong-type-argument number-or-marker-p nil) +(nil 1) (substring filename (+ (cl-position 46 filename) 1) (length filename)) (and t (substring filename (+ (cl-position 46 filename) 1) (length filename))) (let* ((file-extension (and t (substring filename (+ (cl-position 46 filename) 1) (length filename)))) (langserver-info (and file-extension (cl-find-if #'(lambda (pair) (let … …)) extension-list)))) (if langserver-info (cdr langserver-info))) lsp-bridge-get-lang-server-by-extension(“/home/eric/a” (((“vue”) . “volar_emmet”) ((“ts”) . “typescript_eslint”) ((“tsx”) . “typescriptreact_eslint”) ((“component.html”) . “angular_template_html”) ((“component.ts”) . “angular_template_typescript”))) lsp-bridge-get-multi-lang-server-by-extension(“/home/eric/a”) (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename)) (let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))) (lang-server-by-name (or (lsp-bridge-get-single-lang-server-by-extension filename) (lsp-bridge-get-single-lang-server-by-file-mode filename)))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name)) (if filename (let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))) (lang-server-by-name (or (lsp-bridge-get-single-lang-server-by-extension filename) (lsp-bridge-get-single-lang-server-by-file-mode filename)))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name))) (let* ((filename (and t (or (condition-case nil (progn (file-truename …)) (error nil)) (if (lsp-bridge-is-remote-file) (progn lsp-bridge-remote-file-path)))))) (if filename (let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))) (lang-server-by-name (or (lsp-bridge-get-single-lang-server-by-extension filename) (lsp-bridge-get-single-lang-server-by-file-mode filename)))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name)))) (cond ((and lsp-bridge-enable-org-babel (eq major-mode 'org-mode)) (set (make-local-variable 'acm-is-elisp-mode-in-org) nil) (lsp-bridge-org-babel-check-lsp-server)) ((and (boundp 'acm-backend-lsp-server-names) acm-backend-lsp-server-names) acm-backend-lsp-server-names) (t (let* ((filename (and t (or (condition-case nil … …) (if … …))))) (if filename (let* ((multi-lang-server-name (or … …)) (lang-server-by-name (or … …))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name)))))) lsp-bridge-has-lsp-server-p() (or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode ‘org-mode) (not (lsp-bridge-is-org-temp-buffer-p)))) (if (or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode ‘org-mode) (not (lsp-bridge-is-org-temp-buffer-p)))) (progn (if (not (lsp-bridge-is-remote-file)) (progn (if (and (buffer-file-name) (not (file-exists-p …))) (progn (save-buffer))))) (acm-backend-lsp-init) (acm-backend-lsp-workspace-symbol-init) (if lsp-bridge-enable-signature-help (progn (if lsp-bridge-signature-help-timer nil (setq lsp-bridge-signature-help-timer (run-with-idle-timer lsp-bridge-signature-help-fetch-idle t #’…))))) (if lsp-bridge-enable-auto-format-code (progn (if lsp-bridge-auto-format-code-timer nil (setq lsp-bridge-auto-format-code-timer (run-with-idle-timer lsp-bridge-auto-format-code-idle t #’…))))))) (if (or (equal (buffer-name (current-buffer)) acm-buffer) (equal (buffer-name (current-buffer)) acm-doc-buffer)) nil (if lsp-bridge-disable-backup (progn (setq make-backup-files nil) (setq auto-save-default nil) (setq create-lockfiles nil))) (if (and lsp-bridge-symbols-enable-which-func (featurep 'which-func) which-function-mode) (set (make-local-variable 'which-func-functions) (if (member #'lsp-bridge-symbols–current-defun which-func-functions) which-func-functions (setq which-func-functions (cons #'lsp-bridge-symbols–current-defun which-func-functions))))) (set (make-local-variable ‘lsp-bridge-revert-buffer-flag) nil) (if acm-backend-elisp-symbols-update-timer nil (setq acm-backend-elisp-symbols-update-timer (run-with-idle-timer lsp-bridge-elisp-symbols-update-idle t #’(lambda nil (funcall 'lsp-bridge-elisp-symbols-update))))) (if (or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode 'org-mode) (not (lsp-bridge-is-org-temp-buffer-p)))) (progn (if (not (lsp-bridge-is-remote-file)) (progn (if (and (buffer-file-name) (not …)) (progn (save-buffer))))) (acm-backend-lsp-init) (acm-backend-lsp-workspace-symbol-init) (if lsp-bridge-enable-signature-help (progn (if lsp-bridge-signature-help-timer nil (setq lsp-bridge-signature-help-timer (run-with-idle-timer lsp-bridge-signature-help-fetch-idle t …))))) (if lsp-bridge-enable-auto-format-code (progn (if lsp-bridge-auto-format-code-timer nil (setq lsp-bridge-auto-format-code-timer (run-with-idle-timer lsp-bridge-auto-format-code-idle t …))))))) (let ((tail lsp-bridge–internal-hooks)) (while tail (let ((hook (car tail))) (apply #'add-hook hook) (setq tail (cdr tail))))) (advice-add #'acm-hide :after #'lsp-bridge–completion-hide-advisor)) lsp-bridge–enable() (if lsp-bridge-mode (lsp-bridge–enable) (lsp-bridge–disable)) (let ((last-message (current-message))) (setq lsp-bridge-mode (cond ((eq arg 'toggle) (not lsp-bridge-mode)) ((and (numberp arg) (< arg 1)) nil) (t t))) (if (boundp 'local-minor-modes) (progn (setq local-minor-modes (delq 'lsp-bridge-mode local-minor-modes)) (if lsp-bridge-mode (progn (setq local-minor-modes (cons 'lsp-bridge-mode local-minor-modes)))))) (if lsp-bridge-mode (lsp-bridge–enable) (lsp-bridge–disable)) (run-hooks 'lsp-bridge-mode-hook (if lsp-bridge-mode 'lsp-bridge-mode-on-hook ‘lsp-bridge-mode-off-hook)) (if (called-interactively-p ‘any) (progn nil (if (and (current-message) (not (equal last-message (current-message)))) nil (let ((local " in current buffer")) (message “%s %sabled%s” “Lsp-Bridge mode” (if lsp-bridge-mode “en” “dis”) local)))))) lsp-bridge-mode(1) (progn (lsp-bridge-mode 1)) (if (cl-every #’(lambda (pred) (lsp-bridge-check-predicate pred “global-lsp-bridge-mode”)) lsp-bridge-enable-predicates) (progn (lsp-bridge-mode 1))) #f(lambda () [t] (if (cl-every #’(lambda (pred) (lsp-bridge-check-predicate pred “global-lsp-bridge-mode”)) lsp-bridge-enable-predicates) (progn (lsp-bridge-mode 1))))() run-hooks(change-major-mode-after-body-hook prog-mode-hook python-base-mode-hook python-mode-hook) apply(run-hooks change-major-mode-after-body-hook (prog-mode-hook python-base-mode-hook python-mode-hook)) run-mode-hooks(python-mode-hook) python-mode() funcall-interactively(python-mode) call-interactively(python-mode record nil) command-execute(python-mode record) execute-extended-command(nil “python-mode” “python-mod”) funcall-interactively(execute-extended-command nil “python-mode” “python-mod”) call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command)
我把 lsp-bridge 重新下载安装了, 但貌似不起作用.
Debugger entered–Lisp error: (wrong-type-argument number-or-marker-p nil) +(nil 1) (substring filename (+ (cl-position 46 filename) 1) (length filename)) (and t (substring filename (+ (cl-position 46 filename) 1) (length filename))) (let* ((file-extension (and t (substring filename (+ (cl-position 46 filename) 1) (length filename)))) (langserver-info (and file-extension (cl-find-if #'(lambda (pair) (let … …)) extension-list)))) (if langserver-info (cdr langserver-info))) lsp-bridge-get-lang-server-by-extension(“/home/eric/aa” (((“vue”) . “volar_emmet”) ((“ts”) . “typescript_eslint”) ((“tsx”) . “typescriptreact_eslint”) ((“component.html”) . “angular_template_html”) ((“component.ts”) . “angular_template_typescript”))) lsp-bridge-get-multi-lang-server-by-extension(“/home/eric/aa”) (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename)) (let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))) (lang-server-by-name (or (lsp-bridge-get-single-lang-server-by-extension filename) (lsp-bridge-get-single-lang-server-by-file-mode filename)))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name)) (if filename (let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))) (lang-server-by-name (or (lsp-bridge-get-single-lang-server-by-extension filename) (lsp-bridge-get-single-lang-server-by-file-mode filename)))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name))) (let* ((filename (and t (or (condition-case nil (progn (file-truename …)) (error nil)) (if (lsp-bridge-is-remote-file) (progn lsp-bridge-remote-file-path)))))) (if filename (let* ((multi-lang-server-name (or (lsp-bridge-get-multi-lang-server-by-extension filename) (lsp-bridge-get-multi-lang-server-by-file-mode filename))) (lang-server-by-name (or (lsp-bridge-get-single-lang-server-by-extension filename) (lsp-bridge-get-single-lang-server-by-file-mode filename)))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name)))) (cond ((and lsp-bridge-enable-org-babel (eq major-mode 'org-mode)) (set (make-local-variable 'acm-is-elisp-mode-in-org) nil) (lsp-bridge-org-babel-check-lsp-server)) ((and (boundp 'acm-backend-lsp-server-names) acm-backend-lsp-server-names) acm-backend-lsp-server-names) (t (let* ((filename (and t (or (condition-case nil … …) (if … …))))) (if filename (let* ((multi-lang-server-name (or … …)) (lang-server-by-name (or … …))) (if multi-lang-server-name multi-lang-server-name lang-server-by-name)))))) lsp-bridge-has-lsp-server-p() (or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode ‘org-mode) (not (lsp-bridge-is-org-temp-buffer-p)))) (if (or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode ‘org-mode) (not (lsp-bridge-is-org-temp-buffer-p)))) (progn (if (not (lsp-bridge-is-remote-file)) (progn (if (and (buffer-file-name) (not (file-exists-p …))) (progn (save-buffer))))) (acm-backend-lsp-init) (acm-backend-lsp-workspace-symbol-init) (if lsp-bridge-enable-signature-help (progn (if lsp-bridge-signature-help-timer nil (setq lsp-bridge-signature-help-timer (run-with-idle-timer lsp-bridge-signature-help-fetch-idle t #’…))))) (if lsp-bridge-enable-auto-format-code (progn (if lsp-bridge-auto-format-code-timer nil (setq lsp-bridge-auto-format-code-timer (run-with-idle-timer lsp-bridge-auto-format-code-idle t #’…))))))) (if (or (equal (buffer-name (current-buffer)) acm-buffer) (equal (buffer-name (current-buffer)) acm-doc-buffer)) nil (if lsp-bridge-disable-backup (progn (setq make-backup-files nil) (setq auto-save-default nil) (setq create-lockfiles nil))) (if (and lsp-bridge-symbols-enable-which-func (featurep 'which-func) which-function-mode) (set (make-local-variable 'which-func-functions) (if (member #'lsp-bridge-symbols–current-defun which-func-functions) which-func-functions (setq which-func-functions (cons #'lsp-bridge-symbols–current-defun which-func-functions))))) (set (make-local-variable ‘lsp-bridge-revert-buffer-flag) nil) (if acm-backend-elisp-symbols-update-timer nil (setq acm-backend-elisp-symbols-update-timer (run-with-idle-timer lsp-bridge-elisp-symbols-update-idle t #’(lambda nil (funcall 'lsp-bridge-elisp-symbols-update))))) (if (or (lsp-bridge-has-lsp-server-p) (and lsp-bridge-enable-org-babel (eq major-mode 'org-mode) (not (lsp-bridge-is-org-temp-buffer-p)))) (progn (if (not (lsp-bridge-is-remote-file)) (progn (if (and (buffer-file-name) (not …)) (progn (save-buffer))))) (acm-backend-lsp-init) (acm-backend-lsp-workspace-symbol-init) (if lsp-bridge-enable-signature-help (progn (if lsp-bridge-signature-help-timer nil (setq lsp-bridge-signature-help-timer (run-with-idle-timer lsp-bridge-signature-help-fetch-idle t …))))) (if lsp-bridge-enable-auto-format-code (progn (if lsp-bridge-auto-format-code-timer nil (setq lsp-bridge-auto-format-code-timer (run-with-idle-timer lsp-bridge-auto-format-code-idle t …))))))) (let ((tail lsp-bridge–internal-hooks)) (while tail (let ((hook (car tail))) (apply #'add-hook hook) (setq tail (cdr tail))))) (advice-add #'acm-hide :after #'lsp-bridge–completion-hide-advisor)) lsp-bridge–enable() (if lsp-bridge-mode (lsp-bridge–enable) (lsp-bridge–disable)) (let ((last-message (current-message))) (setq lsp-bridge-mode (cond ((eq arg 'toggle) (not lsp-bridge-mode)) ((and (numberp arg) (< arg 1)) nil) (t t))) (if (boundp 'local-minor-modes) (progn (setq local-minor-modes (delq 'lsp-bridge-mode local-minor-modes)) (if lsp-bridge-mode (progn (setq local-minor-modes (cons 'lsp-bridge-mode local-minor-modes)))))) (if lsp-bridge-mode (lsp-bridge–enable) (lsp-bridge–disable)) (run-hooks 'lsp-bridge-mode-hook (if lsp-bridge-mode 'lsp-bridge-mode-on-hook ‘lsp-bridge-mode-off-hook)) (if (called-interactively-p ‘any) (progn nil (if (and (current-message) (not (equal last-message (current-message)))) nil (let ((local " in current buffer")) (message “%s %sabled%s” “Lsp-Bridge mode” (if lsp-bridge-mode “en” “dis”) local)))))) lsp-bridge-mode(1) (progn (lsp-bridge-mode 1)) (if (cl-every #’(lambda (pred) (lsp-bridge-check-predicate pred “global-lsp-bridge-mode”)) lsp-bridge-enable-predicates) (progn (lsp-bridge-mode 1))) #f(lambda () [t] (if (cl-every #’(lambda (pred) (lsp-bridge-check-predicate pred “global-lsp-bridge-mode”)) lsp-bridge-enable-predicates) (progn (lsp-bridge-mode 1))))() run-hooks(change-major-mode-after-body-hook prog-mode-hook python-base-mode-hook python-mode-hook) apply(run-hooks change-major-mode-after-body-hook (prog-mode-hook python-base-mode-hook python-mode-hook)) run-mode-hooks(python-mode-hook) python-mode() funcall-interactively(python-mode) call-interactively(python-mode record nil) command-execute(python-mode record) counsel-M-x-action(“python-mode”) ivy-call() ivy-read("M-x " # :predicate #f(compiled-function (sym) #<bytecode -0xe6714d8827e84d2>) :require-match t :history counsel-M-x-history :action counsel-M-x-action :keymap (keymap (67108908 . counsel–info-lookup-symbol) (67108910 . counsel-find-symbol)) :initial-input nil :caller counsel-M-x) counsel-M-x() funcall-interactively(counsel-M-x) call-interactively(counsel-M-x nil nil) command-execute(counsel-M-x)
github 上传实例文件和重新步骤吧
想问下各位大佬,lsp-bridge编辑远程的时候补全python超级卡顿,但是像C这种就没问题,请问该怎么排查?或者大佬们有远程python开发的配置可以分享么,谢谢~
(setq lsp-bridge-python-lsp-server 'pylsp
lsp-bridge-c-lsp-server 'clangd
lsp-bridge-python-command "python"
lsp-bridge-python-multi-lsp-server "pylsp_ruff"
acm-enable-capf t
acm-enable-icon t
acm-enable-tabnine nil
acm-candidate-match-function #'orderless-flex
acm-enable-copilot t)
关掉 lsp-bridge 还会卡吗 ? 一般 tramp
更可能是其他 package 没对 remote file 优化 卡 例如 eldoc
(add-hook 'python-mode-hook
(defun leo/python-tramp-turn-off-eldoc ()
(when (file-remote-p default-directory)
(eldoc-mode -1))))