emacs - org-mode 不喜欢 c++-mode

标签 emacs org-mode

我正在使用 org-mode(Emacs:24.3.1,org-mode:7.9.3f 8.0.6)作为不同代码片段的数据库语言(目前主要是 elisp 和 python)。这在使用 org-mode-babel 时非常有效,即在创建“代码字段”之后,如 the documentation 中所述。我可以通过发出 C-c '(即 org-edit-special)使用正确的主模式编辑代码。但是,在编辑 C++ 源代码片段时,例如

#+begin_src c++
std::vector<int> v( 100 );
std::iota( std::begin( v ), std::end( v ), 0 ); // Fill with 0, 1, ..., 99.
#+end_src

错误信息

byte-code: Language mode `c++-mode' fails with: "Buffer *Org Src snippets.org[ c++ ]* has no process"

已打印(snippets.org 是我用来存储片段的文件的名称)。此外,我无法保存在临时缓冲区(实际打开)中所做的任何更改,也无法使用 C-c ' 退出临时缓冲区。

以前有人遇到过这个问题吗?


更新:我找到了罪魁祸首!自动完成源 ac-source-clang-async 负责搞砸它。我的 ac-clang 配置:

(defun ac-cc-mode-clang-setup ()
  (message " * calling ac-cc-mode-clang-setup")
  (setq ac-clang-complete-executable "~/.emacs.d/site-lisp/emacs-clang-complete-async/clang-complete")
  (setq ac-clang-cflags
    (mapcar (lambda (item)(concat "-I" item))
        (split-string
         "
 /usr/include/c++/4.7
 /usr/include/c++/4.7/x86_64-linux-gnu
 /usr/include/c++/4.7/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
 /usr/local/root_v5.32.04/include
"
         )))
  (setq ac-clang-flags ac-clang-cflags)
  ;; (setq ac-sources (append '(ac-source-clang-async ac-source-yasnippet) ac-sources))
  (setq ac-sources '(ac-source-filename ac-source-clang-async ac-source-yasnippet))
  (ac-clang-launch-completion-process)
  (ac-clang-update-cmdlineargs))

(defun ac-cc-mode-clang-config ()
  (message " * calling ac-cc-mode-clang-config")
  (add-hook 'c-mode-common-hook 'ac-cc-mode-clang-setup)
  (add-hook 'auto-complete-mode-hook 'ac-common-setup))

(ac-cc-mode-clang-config)

将其注释掉后,一切正常。我假设问题的发生是因为 ac-clang 想要在源文件上执行 clang,该文件不存在,因为它是一个纯虚拟缓冲区(意思是:没有关联文件)。但是,我不想在编写程序时失去对使用 ac-clang 的支持...我认为如果 ac-cc-mode-clang-config 可能会解决这个问题> 仅在我进行真正的 C++ 编辑时执行(不是 org-mode c++ 编辑)。有什么解决办法吗?

最佳答案

这对我有用:

#+begin_src C++ :includes '(<vector> <numeric> <iostream>) :flags -std=c++11
  std::vector<int> v( 100 );
  std::iota( std::begin( v ), std::end( v ), 0 );
  std::cout << v[7];
#+end_src

#+RESULTS:
: 7

Emacs 24.3.4。组织 8.0.6.

组织设置

(org-babel-do-load-languages
 'org-babel-load-languages
  '( (perl . t)
     (ruby . t)
     (sh . t)
     (python . t)
     (emacs-lisp . t)
     (matlab . t)
    (C . t)))

关于emacs - org-mode 不喜欢 c++-mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17925417/

相关文章:

emacs - 配置 emacs 以显示固定宽度的内嵌图像

emacs - 如何在 Emacs org-mode 中养成每天执行一定次数的习惯

python - Emacs:检查文件路径是否包含目录名称

emacs - 多个 org-mode 表共享一个 #+TBLFM 行

org-mode - 在 org 模式下格式化日期

node.js - npm在emacs eshell下不能正确显示提示

emacs - 无法在 emacs 组织模式下打开链接

image - 如何始终显示内嵌图像?

emacs - 如何在 Org 模式下将 csquotes 与 LaTeX 导出一起使用?

macos - Home/end 控制字符在 Mac OS X 终端下的 emacs 中不起作用