spacemacs org-mode 无法执行代码块

环境:

  • system: Arch Linux
  • emacs version: GNU Emacs 25.1.1
  • spacemacs version: master 0.200.7

org mode 配置文件

(defun dotspacemacs/user-config ()
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((python . t))))

在org文件中执行python代码,出现:

Evaluation of this python code block is disabled.

通过Google找到一个解决办法,就是:

rm -rf ~/.emacs.d/elpa/org-plus-contrib-20170210/

但每次重新启动 emacs 就会重新安装 org-plus-contrib package 导致 org-mode 再次无法执行 python code block

不知道大家有没有遇到这种情况

一个临时的解决办法就是启动 spacemacs 之后用 M-x org-reload 重新加载 org 的配置。目前 spacemacs 中有好几个 issue 都提到了这个问题,预计过一段时间就会被修复吧。

我这边启动spacemacs后用 M-x org-reload 重新加载org配置不起作用,只有删除org-plus-contrib package才行

如果删除了 org-plus-contrib 那么用的 org 可能就是内置的旧版本的org了。

试试把你所有的 org 配置用 with-eval-after-load 封装起来,比如下面这样。不用删除 org-plus-contrib,打开一个 org 文件后,运行一下 org-reload 应该就可以 evaluate 代码块了。

  (with-eval-after-load 'org
    (org-babel-do-load-languages 'org-babel-load-languages
                                 '(
                                   (python . t)
                                   (shell . t)
                                   )))

应该是org-mode 9 的锅吧? 我刚升级org-mode 9 的时候遇到了这个问题然后在reddit上找到了这个网页 https://lists.gnu.org/archive/html/emacs-orgmode/2016-11/msg00045.html

当时我是通过卸载并重新安装 org-mode 解决的问题

1 个赞

我一直用 org-mode 开发版,没有问题。既然你不用它,为什么不放到 dotspacemacs-excluded-packages 排除掉。

spacesmace 的开箱即用是优点,某种程度上说也正是它的缺点,大量你没用到的/没想到的功能,不定哪天就出 bug。

你最近把哪些 Packages 从你的 Emacs 配置中移除掉了?

2 个赞

问题已解决: 1. dotspacemacs-excluded-packages '(org-plus-contrib) 2. 将 package-selected-packages 里的org-plus-contrib移除 3. 重新安装org-mode package

首次在这里发帖,非常感谢大家的帮助!

更简单的办法是到 .emacs.d/elpa/ 路径下把 org-plus-contrib 文件夹删除 rm -rf org-plus-contrib (tab 补全),然后重启 emacs 就行了,spacemacs 会自动开始安装。这样只需要重启一次。

可以 M-x 依次试一下下面两个函数:

 byte-recompile-directory
 byte-forece-recompile

参考这个 issue, 我解决了. Org-Mode Evaluation of code disabled

在.spacemacs 中执行recompile-elpa 我的是这样就好了