在 org-mode src blocks 中直接编辑代码实现自动补全等功能

Org-mode 文学编程时需要 C-c’ 进入 org-edit-src-code 下编辑才能实现自动补全和缩进等功能,现在不用再这么麻烦了,有人实现直接在 Org-mode 中编辑代码和自动补全了

https://www.youtube.com/watch?v=a2jHqB1qWiY http://kitchingroup.cheme.cmu.edu/blog/2017/06/10/Adding-keymaps-to-src-blocks-via-org-font-lock-hook/

4 个赞

哈,看起来挺有意思,有时间会试试。

但是仅用 keymap 模拟一个 Buffer 应该是不够的,Major mode、Syntax table、Current buffer 以及其它的 buffer-local 的变量还是不对,如果命令依赖它们的话(比如 C-h S (info-lookup-symbol)),估计还是不行(?)总之应该不能完全取代 C-c ' (org-edit-special)。

是挺方便,不过各种环境/变量切换来去不会打架么。

我想是不是可以在光标移动到代码块的时候,原地画一个代码块大小的 buffer,不开新窗口。就像其它软件点击表格的 cell 进入编辑状态一样,其实是在 cell 上画了一个编辑框,编辑完了把内容写回 cell。

这个功能目前还有不少问题,至少在我这边是不工作的。我已经提交了 Issue。

感觉 Kitchin 老师更新的节奏越来越快了,有些功能可能会存在 bug。我这几天被一个 async execution 的 bug 折磨得够呛,目前也只是临时解决了,还不清楚根源在哪。

使用这个功能的时候注意,必须使用 Kitchin fork 的 ob-ipython 才行(虽然用了也未必工作,但是不用肯定是不工作的 :joy:) 。

Edit:我说的问题是针对 ipython 代码块在 orgmode 中的补全,其它语言的暂时没有尝试。

我也是倾向于继续使用原来的工作流,也就是使用 org-edit-special。在 org buffer 中补全可能会造成混乱,而且并没有解决现存的问题,比如,python 的 edit buffer 要想获得自动补全,必须手动添加 import。在 org buffer 中补全并不会解决这一问题。