org mode代码块中根据语言提示补全自定义内容

举个例子, 比如我现在在mathematica代码块中, 输入minimum, 我希望能提示补全自己定义的snippet, FindMinimum[1/x Exp[x^2/2], {x, 1}]. yasnippet做不到, 因为它不会看当前在什么语言的代码块下. 在其它场景, 同一个keyword对应的展开可能是不同的, 比如R语言也有求极值的snippet.

也就是:

  • 根据代码块的语言提示补全
  • 补全的内容是可以自定义的, 比如我有些常用参数, 标准补全不能满足这个需求
  • 补全的内容可以很长, 比如可能是好几行的一个snippet.
  • 最好能效率比较高, 不卡顿.

请问现在有办法能做到这一点么?

可参考 mhtml-mode,为代码块实现 submode。

好的, 如果不考虑语言, emacs有啥办法能自定义补全内容呢?

在代码块中按 C-c ‘ ,进入相应的 mode ,应该就可以用不同语言的补全了吧

submode 可解决部分问题。

但是你如果还想用 lsp 补全,一个块一个 lsp 进程,恐怕目前 lsp-mode 还无法支持这种玩法。

另外还有就是 submode 必定消耗额外的资源。

我不需要用lsp mode, 关键是只要能自定义补全源就好了, 因为我经常有些固化的写法.