Eglot 与 tab-width

在执行 (setq tab-width 4) 并且 (eglot-ensure) 之后,新编辑一个文件(没有任何 clang 相关配置文件),按 tab 键或者执行 (eglot-format) ,缩进都是按 tab 等于 2 个空格,也就是 clangd 的默认来的。

有没有办法让缩进默认 4 个空格,除非被 .clang-format 覆盖?

Eglot 版本是 20211009 ,clangd 12.0.1 。在早一点的版本里, tab-width 似乎能影响 eglot-format 。但是这几个版本的 eglot-format 都是把 tabSize 设置为 tab-width ,不知道为什么现在就不行了。另外,我也想让 tab-width 影响 tab 键的行为,这在早一点的版本里也不行。

  • 新建一个全局的 ~/.clang-format
  • 或者用editorconfig

有没有配置 clangd 或者配置 emacs 的方法?

修改 c-basic-offset 有效,至于 eglot-format ,我觉得可能是 clangd 的 bug 。

全局的是 ~/.clang-format

Clang 和 Emacs 都是区分 TabWidthIndentWidth 的。我最后从 clang-format 读取这两个值,然后修改 Emacs 的设置。目前没有比较好的设定全局默认值的方式,不过至少可以让 Clang 和 Emacs 保持一致。

(let* ((c (shell-command-to-string "clang-format --dump-config"))
       (w (progn
            (string-match "^TabWidth:[^0-9]*\\([0-9]+\\)$" c)
            (string-to-number (match-string 1 c))))
       (o (progn
            (string-match "^IndentWidth:[^0-9]*\\([0-9]+\\)$" c)
            (string-to-number (match-string 1 c)))))
  (setq-local tab-width w c-basic-offset o))
1 个赞