Emacs 中 org 代码块高亮问题

不知道大家发现没,在 org 文档中,当代码块长到一个屏幕放不下的时候,并且碰巧是从下向上浏览,没有显示全部代码块,那么代码块就会渲染为普通的文本。只有当浏览到 #+begin_src 的时候才会渲染为代码。

补充两个截图,大家应该更容易明白我的意思(可以调整到合适位置 revert-buffer 一下就能复现):

1 个赞

比较卡的时候好像 font-lock 就是这样的,我用 nov.el 自定义了一些 font-lock 也是这样的。

没发现有这问题啊,怎么操作的,复现一下?

没错我也是这样子的

1 个赞

你在 org 文档中创建一个长一点的代码块,然后你把代码块开头 #+begin_src 移出屏幕,然后 revert-buffer 一下就可以复现了。

font-lock-update C-x x f

试了一下,没有出现不能高亮的现象

谢谢这个解决了我的问题

那有点奇怪,我在 emacs -Q 启动中也能复现这个问题

还有个疑问,我把这个函数绑定到 org-mode-hook 上,重新刷新 buffer 还是没有高亮,还要手动执行一下 font-lock-update

我也没办法了, font-lock-update 这个方法也是看其它的帖子发现的,我猜使用了 treesit 的 mode 可能会没这个问题,使用 font-lock 的就先忍忍了,要是这个问题解决了它干嘛要给 font-lock-update 默认绑定一个快捷键。 :joy:

我一般编辑 org mode 里的源代码都是 C-c ' org-edit-special ,倒也不太在意 org-mode 里高亮是否正确了。

在家里电脑复现了,在公司电脑上没复现,不清楚什么原因

我一般不在org中写太长的代码,如果长的话放到源码文件里,再拉到org中