Org Mode 语法检查器

9

正确的语法是:

#+PROPERTY: header-args :tangle "~/.config/emacs/init.el" 

但是有一次,我使用了 header-aegs 而非 header-args。 注意到了 e 替代了 r。 我遇到了可怕的错误:tangled 0 code blocks 这个东西。 花费了很长时间才找到了错误。 我的问题是:

  1. 未来如何避免这种情况?
  2. 也许有某种语法检查器?例如 flycheck 或 Org Mode LSP 实现?

1
你可以在emacs配置文件中像这样启用FlyCheck - (with-eval-after-load 'org (flycheck-mode)) - ByteBrawler0
@ByteBrawler0 但是flycheck没有适用于Org Mode的检查器。 - Refael Sheinker
1
不幸的是,这需要更多的语法检查器。Misspelling header-aegs 并不会导致语法错误:你仍然在定义一个属性,只是不是你想要的那个。org-lint 确实可以找到一些语法问题(肯定不是全部),但对于这种情况它无能为力。但它是可扩展的,所以向其中添加检查器应该相当容易。请参阅 C-h f org-lintC-h f org-lint-add-checker 了解更多信息。 - NickD
1
很遗憾,这需要更多的东西而不仅仅是一个语法检查器。拼写错误的 header-aegs 并不会导致语法错误:你仍然在定义一个属性,只是不是你想要的那个。org-lint 确实可以找到一些语法问题(当然不是全部),但对于这种情况它无能为力。但它是可扩展的,所以向其中添加一个检查器应该相对容易。请参考 C-h f org-lintC-h f org-lint-add-checker 获取更多信息。 - NickD
1
很不幸,这需要更多的东西而不仅仅是一个语法检查器。拼写错误的 header-aegs 并不会导致语法错误:你仍然在定义一个属性,只是不是你想要的那个。org-lint 确实可以找到一些语法问题(当然不是所有问题),但对于这种情况它无能为力。但它是可扩展的,所以向它添加一个检查器应该相对容易。请使用 C-h f org-lintC-h f org-lint-add-checker 获取更多信息。 - undefined
2个回答

0

您可以尝试使用“Literate programming using LSP and org-mode(alpha)”,这是一个仍处于alpha测试阶段的项目,用于文学编程。

lsp-mode 提供了在 org-mode 源代码块内运行语言服务器的实验性支持。
为了实现这一点,lsp-mode 通过获取源代码块头部信息(语言+ :tangle),将光标位置来回转换为LSP位置,从而使语言服务器认为Emacs已经打开了原始文件。
为了使其正常工作,文件也必须存在于磁盘上,因为服务器期望找到它们。

它还提到了 org-mode 集成(预览版)

整合很基本,但可用 - 基本上你可以直接在org-mode文档中运行语言智能来处理org-mode源代码块。
我们通过创建虚拟缓冲区抽象来实现这一点,从而使我们能够欺骗服务器,让客户端打开了实际文件。

非常感谢您的回答。看起来非常有趣,我一定会去看看。但是,您的回答并没有回答我的问题。 - Refael Sheinker
@RefaelSheinker 的想法是回答“如何避免这种情况再次发生?”和“也许有一个 Org Mode LSP 实现?”的问题,提供“lsp-mode 对 org-mode 源代码块的实验性支持”。由于 Emacs 中没有专门针对 Org Mode 的 FlyCheck 语法检查器,我认为这个 LSP 模块是您最好的选择。 - VonC

0

就像你注意到的那样,flycheck没有Org-mode的检查器。

你也可以尝试@VonC的答案,但这可能不起作用,并且根据你的知识水平设置可能会很繁琐。

我的答案是:Yasnippet

如果你还没有使用它们,你应该使用它们,它们是一种更快、更安全地开发你想要的方式的好方法。这是一个“设置一次,完成”的解决方案,所以非常容易。

你也可以将这个解决方案与良好的自动补全工具结合起来使用,我会让你在这些方向上搜索,如果需要的话我会编辑东西。


我知道Yasnippet,但这并没有帮助。在我的情况下,我第一次打字就正确了。后来由于错误,er混淆了。 - Refael Sheinker
@RefaelSheinker,你的意思是 e 和 r 混淆不是你的问题。它出现在你没有敲 e 而是敲了 r 的情况下?因为如果你每次使用片段,就不会有问题,每次都会得到正确的字母。 - Thibault Cimic
“它到达那里是因为你误敲了一个 e 而不是 r 吗?” - 不,不是的,肯定是我误敲了,但完全是无意中,我甚至没有注意到自己是怎么做的。 - Refael Sheinker
@RefaelSheinker 好的,如果是这样的话,使用代码片段肯定可以解决问题,因为代码片段允许您不必输入代码行。 - Thibault Cimic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接