Doom Emacs 如何使用yapf格式化Python代码

Doom Emacs 的init文件里有个选项我打开了 (format +onsave),但是它是用black格式化Python代码。我想用yapf格式化成google-style,请问应该怎么设置?

另外lsp-format-buffer也不能用,报错Capability not supported by the language server: "documentFormattingProvider",应该怎么解决?我的python lsp是pyright.

1 个赞

你本地是否安装了yapf,还有就是需要激活yapf并禁用autopep8

(setq lsp-pyls-plugins-autopep8-enabled nil)
(setq lsp-pyls-plugins-yapf-enabled t)

主要是因为pyright这个lsp本身不包含格式化的功能,所以格式化的时候doom调用的不是lsp。如果用的是pylsp就没这些事情了。

当lsp不支持格式化时,doom会使用format-all-the-code这个包,但是doom用的是比较老的版本,还不支持yapf,你如果把format-all-the-code更新到最新版本,就可以调用yapf了。

1 个赞

请问把 modules/editor/format/packages.el 里面的SHA更新以后应该怎么升级?好像doom sync并不起作用.

你在.doom.d/package.el里添加如下的代码 (unpin! pinned-package) 即可,你点进去package.el,里面就有介绍的。

1 个赞

yapf的命令行参数在config.el应该怎么写呢?写成这样

(setq format-all-formatters
      '(("Python" (yapf "--style='{based_on_style: google, column_limit: 100}'"))))

就会报错:

yapf: “‘{based_on_style: google, column_limit: 100}’” is not a valid style or file path

建议使用.style.yapf给每一个project都做一个local的设置,不要在命令行参数里指定这些东西。