使用eglot时c-electric-semi&comma导致C#代码缩进异常的原因
解决Eglot下C#代码按分号后的异常缩进问题
针对从lsp-mode切换到Eglot后,C#代码按下分号出现缩进异常的问题,可通过以下步骤排查解决:
1. 强制绑定C#模式的基础缩进规则
Eglot或csharp-mode的默认缩进可能覆盖了.editorconfig的配置,手动在csharp-mode钩子中设置缩进参数:
(add-hook 'csharp-mode-hook (lambda () ;; 统一缩进为2空格 (setq-local csharp-indent-offset 2) (setq-local c-basic-offset 2) ;; 禁用制表符,确保用空格缩进 (setq-local indent-tabs-mode nil)))
2. 修正分号的绑定行为
c-electric-semi的自动缩进逻辑可能和Eglot冲突,替换分号的绑定逻辑,改为插入分号后按当前模式规则缩进:
(define-key csharp-mode-map ";" (lambda () (interactive) (insert ";") (indent-according-to-mode)))
3. 隔离Eglot的自动格式化
如果启用了Eglot的自动格式化,可能会和Emacs自身缩进规则冲突,关闭该功能:
(add-hook 'eglot-managed-mode-hook (lambda () (setq eglot-format-on-save nil)))
4. 确保缩进语法控制参数生效
将c-syntactic-indentation设置为nil的时机要正确,需在csharp-mode启动时局部生效:
(add-hook 'csharp-mode-hook (lambda () (setq-local c-syntactic-indentation nil)))
完成以上配置后,重启Emacs或重新打开C#文件,测试输入代码并按下分号,应该能保持2空格的缩进规则,不再出现异常缩进。
内容的提问来源于stack exchange,提问作者Lee Crabtree
相关产品推荐
相关产品推荐

