Spacemacs中org-mode的#+begin_src lisp代码块缩进异常问题
Spacemacs org-mode Lisp代码块缩进异常原因及解决方案
问题原因
该缩进异常是两类模式缩进规则冲突导致的,核心触发逻辑如下:
- org-mode默认会将代码块开头的前置缩进纳入缩进量计算,你编写代码块时自带的开头空格,被Lisp模式的自动缩进逻辑识别为代码的基础缩进,回车后会叠加缩进量
- Spacemacs默认未开启代码块内原生模式缩进配置,代码块内混用org-mode和Lisp-mode的两套缩进规则,括号匹配时的缩进计算错位,就会出现字符中间插入多余空格、缩进混乱的问题
解决方案
- 临时修复(当前文件立刻生效)
按下快捷键C-c '进入代码块的独立编辑缓冲区,该缓冲区会自动加载原生Lisp模式,所有缩进、高亮规则均遵循Lisp模式逻辑,编辑完成后再按C-c '即可把内容同步回org文件,完全规避缩进冲突。 - 永久修复(全局生效)
打开Spacemacs配置文件(默认路径为~/.spacemacs),在dotspacemacs/user-config代码块中添加如下配置:
配置添加完成后,按下;; 开启org代码块内使用对应主模式原生缩进逻辑 (setq org-src-tab-acts-natively t) ;; 代码块内容不额外增加缩进 (setq org-edit-src-content-indentation 0) ;; 保留代码块原有缩进,不自动修正 (setq org-src-preserve-indentation t) ;; 禁止org模式下自动缩进的异常联动 (add-hook 'org-mode-hook (lambda () (setq-local electric-indent-inhibit t)))SPC f e R重载Spacemacs配置即可生效,无需重启软件。 - 单文件生效配置
如果你不需要修改全局配置,可以在对应org文件的头部添加如下局部配置,仅对当前文件生效:#+OPTIONS: org-src-preserve-indentation:t
内容的提问来源于stack exchange,提问作者AreTaro
相关产品推荐
相关产品推荐

