You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:51:16