以下是我在Rust开发中经常使用的一个场景:

  1. 铁 rust LSP始终打开.
  2. 我把LSP特性称为"格式化当前缓冲区"(或者不管它叫什么).
  3. LSP返回格式化的缓冲区(在内部,LSP使用rustfmt).

由于Emacs Elisp没有LSP实现,我如何才能实现类似的功能呢? 例如,我想按下某个按钮,然后格式化缓冲区中的代码(不仅仅是缩进,格式化).

附注: Emacs新手在此,从Neovim过渡过来.

推荐答案

事实上,在用户配置文件中定义了Elisp条格式化规则,每个项目.dir-locals.el条,并且通常遵循this style guide suggestions条.

Emacs 29开始,对于其中的pretest is now available,可以使用新函数pp-emacs-lisp-code,该函数"应用适用于Emacs Lisp代码的格式化规则".

该函数的文档字符串当前声明:

将SEXP插入当前缓冲区,格式为Emacs Lisp代码.使用 用于控制所需线路长度的pp-max-width变量.注意事项 对于大型SEXP来说,这可能是缓慢的.

Command that formats (prettifies) Elisp code个线程中列出了许多用于Elisp格式化的第三方包.

Rust相关问答推荐

如何在tauri—leptos应用程序中监听后端值的变化?""

使用 struct 外部的属性来改变 struct 的原始方式

为什么BitVec缺少Serialize trait?

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

如何在递归数据 struct 中移动所有权时变异引用?

如何修复数组中NewType导致的运行时开销

JSON5中的变量类型(serde)

在Rust中声明和定义一个 struct 体有什么区别

Const 上下文:从 init 函数创建具有 const 通用长度的数组

unwrap 选项类型出现错误:无法移出共享引用后面的*foo

rust tokio::spawn 在 mutexguard 之后等待

当 T 不是副本时,为什么取消引用 Box 不会抱怨移出共享引用?

为什么会出现无法移出可变引用后面的 `self.x`错误?

如何使用 rust bindgen 生成的 std_vector

如何将切片推入数组?

在 Traits 函数中设置生命周期的问题

为什么我可以在没有生命周期问题的情况下内联调用 iter 和 collect?

如何将 u8 切片复制到 u32 切片中?

基于名称是否存在的条件编译

当值是新类型包装器时,对键的奇怪 HashMap 生命周期要求