有人提到了一个已有的类似的包。
purcell发布了一个定义代码格式化工具的包。可以通过一些简单的定义,来使这些调用外部工具的格式化工具得到统一的接口。暂时好像只能对整个buffer操作?
简单试用了一下大致可以把:
(use-package json-reformat)
(use-package py-yapf)
(use-package py-isort)
换成了:
(reformatter-define json-format
:program "jq"
:args '("--indent" "4"))
(reformatter-define yapf-format
:program "yapf")
(reformatter-define isort-format
:program "isort"
:args '("--apply" "-"))
2 个赞
今天恰好找代码格式化工具,先没看到楼主这帖子,不过找到了楼主第一行提到的那个format-all-buffer
包,因为它能支持fortran
。
该包链接地址:https://github.com/lassik/emacs-format-all-the-code
感觉那个包很好,装了之后不需要改配置文件就能用,试了试,使用也很不错,在fortran,python和c++都能很好的格式化,也不会有一些工具那种格式化之后某些行末插入^M,某些行末又不插的情况。而且这包有个优点,格式化一种语言时,如果工具没安装,就会在下方提示该用什么方法装什么工具,很贴心。
尝试之后,我把各语言各自的格式化工具都去掉了,只在配置文件中添加了一句:
(add-hook 'after-save-hook 'format-all-buffer)
这样保存的时候就能自动格式化了,比较方便。
2 个赞
Youmu
3
来列举一下这功能不能代替哪些语言的 format 工具。
rust
由于安装 rust
要么是通过 rustup
来安装的,要么是通过系统包管理来操作,都会带
一下 rustfmt
。而写 rust
代码必然会装 rust-mode
这个包。其自带了 format
功能,不过比较可惜的是它也只能 format
整个 buffer
.
cpp
在使用 lsp
的情况下,目前 3 大能用的 c++ lsp
有:
由于 lsp
里有约定格式化相关的方法(虽然上面的这 3 个 ls 底下都是用的 clang 那
一套,即跟单独调用 clang-format
效果一样),所以借着 lsp-format-buffer
,
lsp-format-region
都可以实现 format
功能。
ocaml
对于 ocaml
来说,目前没有使用 lsp
来开发,而采用了 ocp-indent
。 这个倒是可
以通过 format-all-buffer
来代替。
bazel
bazel-mode 也自带了一个,底下
调用的是 buildifier