我的emacs版本是24.3.1。
我了解我必须将ob-C.el(可从此处获得)放在Emacs可以读取它的路径中。
我首先将代码从该.el文件复制粘贴到我的.emacs文件中,然后重新启动emacs。然后我去了C代码块(在org文件中)并尝试执行它(使用Cc Cc)。迷你缓冲区说“ C没有org-babel-execute函数”。试图执行C ++代码块也出现了同样的情况。请注意,R和python从我的org文件中评估完美。问题似乎仅在于这些编译语言。
然后,我尝试将这个ob-C.el放入〜/ .emacs.d目录中,以查看是否有帮助。重新启动emacs并检查。它没有用。
然后我尝试将其放入目录〜/ .emacs.d / lisp并将以下行添加到我的.emacs文件中
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
重新启动emacs之后,无法从组织文件中评估C或C ++代码块。我不断收到相同的错误“对于C没有org-babel执行功能”或“对于C ++没有org-babel执行功能”。
更新资料
我将emacs版本升级到24.5,删除了〜/ .emacs.d目录中所有以前的elpa和melpa子目录。怀疑这与我下达订单的顺序有关
(custom-set-variables
'(org-babel-load-languages
(quote
((emacs-lisp . t)
(C . t)
(css . t)
(sh . t)
(awk . t)
(R . t))))
和
;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
代码块,我将负载“ ob-C.el”放在org-babel-load-languages之前。然后,我多次执行了c ++代码块。没运气。
然后我删除了所有内容(清除了.emacs文件中的custom-set-variables块),现在我的.emacs文件看起来像
;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)
;; load the languages that are needed
(org-babel-do-load-languages
'org-babel-load-languages '((C . t)))
它仍然无法正常工作。
我尝试在orgmode缓冲区中评估的代码是:
#+BEGIN_SRC c
printf("Hello world");
#+END_SRC
重新启动emacs并尝试执行上述代码块后,我的消息缓冲区如下所示:
Loading /home/taeten/.emacs.d/lisp/ob-C.el (source)...done
Wrote /home/taeten/.emacs.d/.emacs.desktop.lock
Desktop: 1 frame, 0 buffers restored.
For information about GNU Emacs and the GNU system, type C-h C-a.
Quit [2 times]
Making completion list... [3 times]
org-babel-execute-src-block: No org-babel-execute function for c! [5
times]
Ignoring unknown mode `elisp-mode'
File local-variables error: (void-function elisp-mode)
byte-code: Beginning of buffer [6 times]
byte-code: Beginning of buffer
load
和require
位。require
确实会加载(如果文件中有一个provide
语句,在这种情况下就是这样),但是您也不需要,require
因为它是由处理的org-babel-do-load-languages
,因此您需要确保org
在进行任何操作之前先要求。另外,我认为C
不是c
,您尝试过吗?