org mode 遇到了两个问题,求解

emacs版本是28.0.50, 系统是Ubuntu18.04.2,最近刚入org-mode的坑,但是遇到了两个问题,求解:

  1. 执行eval-buffer后,报错Invalid syntax read: #, 我以为是什么地方多打了#号,但是找了一下没找到,我怀疑这是emacs版本的bug,不知道有没有大神解答一下。

  1. <s + Tab 不能自动产生SRC block,不知道为什么,按下Tab键后没有任何反应。非常感谢帮助!

  1. eval-buffer 是用在 elisp 代码buffer,在org-mode中执行当然会报错。提示很清楚:Invalid syntax read: #,首行的 # 是Invalid syntax,因为这是org-mode的注释语法,而非elisp代码。看上去您想实践emacs配置的文学编程。执行org-mode中的lisp代码有两种方式:

    1. 直接把光标移动代码区块,按 C-c C-c ,会执行当前区块代码。适合当下的调试。
    2. 如果要用org-mode管理配置文件,需要在 init.el 配置org-babel,参见 elisp - Can I use org-mode to structure my .emacs or other .el configuration file? - Emacs Stack Exchange
  2. 您可以先执行 org-version 查看org-mode的版本。org 9.2之后,代码区块的tab补全需要手动启用Org Tempo library

    (require 'org-tempo)

    参见 spacemacs org-mode <s 不能补全代码块 - Org-mode - Emacs China

建议善用搜索。不过想要准确地描述问题,需要先了解emacs的一些基本概念,知道如何查看当前emacs及各种package的版本(很多问题是版本不兼容造成的)。emacs学习曲线陡峭,不过私以为值得。欢迎加入。

6 个赞

Welcome and happy hacking emacs!

非常感谢!!SRC block的问题按照解答已经解决了,init.el的配置我再去试一下。

我不知道你的 init.el 文件怎么写的,我也是使用org文件管理配置,我的org文件在 ~/emacs.d/my/myinit.org ,我的 init.el 只有一句话(init.el 文件在~/emacs.d/init.el):

;; 读取配置文件
(org-babel-load-file (expand-file-name (concat user-emacs-directory "my/myinit.org")))

修改了 org文件 的配置后,在 init.el 的 buffer 运行 eval-buffer

或者 C-x C-e 一下 (org-babel-load-file (expand-file-name (concat user-emacs-directory "my/myinit.org")))

楼主测试下,会重新载入所有配置。

如果是简单少量的配置,直接在org文件里面的配置语句使用 C-x C-e就行了。

至于 <s + Tab 的事情,楼上已经解决了,我个人已经不用这个方式了,全用 yasnippet 了 :smile:

嗯,已经都解决了,仔细检查后发现还是org文件里面有个地方写错了,多谢!!