首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org-babel src块中的缩进代码

org-babel src块中的缩进代码
EN

Stack Overflow用户
提问于 2013-04-02 20:05:51
回答 4查看 12.6K关注 0票数 16

在一个组织模式文件中,使用如下代码:

代码语言:javascript
复制
#+begin_src emacs-lisp
(add-to-list 'org-tab-before-tab-emulation-hook
             (lambda ()
               (when (within-the-body-of-a-begin-src-block)
                 (indent-for-tab-command--as-if-in-lisp-mode))))
#+end_src

我希望TAB键缩进代码,就像它在lisp模式下处于缓冲区一样。

我需要的是:

  • 一种判断光标是否位于src块内的方法。它不需要触发时,在标题行本身,在这种情况下,默认的组织折叠应该发生。
  • 根据标头中指定的模式(在本例中为emacs)缩进代码的方法。

Org已经可以根据模式高亮显示src块,并且TAB钩子在那里。这个看起来是可行的。

EN

回答 4

Stack Overflow用户

发布于 2014-12-01 20:23:39

由于Emacs24.1,现在可以设置以下选项:

代码语言:javascript
复制
(setq org-src-tab-acts-natively t)

应该处理所有src块的...and。

票数 46
EN

Stack Overflow用户

发布于 2013-06-11 06:45:36

只需将点移到代码块中,然后按C-c‘

这将弹出一个缓冲区在elisp模式,语法高度和所有.

票数 20
EN

Stack Overflow用户

发布于 2013-04-04 19:31:49

以下是一个粗略的解决方案:

代码语言:javascript
复制
(defun indent-org-src-block-line ()
  "Indent the current line of emacs lisp code."
  (interactive)
  (let ((info (org-babel-get-src-block-info 'light)))
    (when info
      (let ((lang (nth 0 info)))
        (when (string= lang "emacs-lisp")
          (let ((indent-line-function 'lisp-indent-line))
            (indent-for-tab-command)))))))

(add-to-list 'org-tab-before-tab-emulation-hook
             'indent-org-src-block-line)

它只处理emacs块。我只对src块进行了测试,没有缩进(不是org默认值)。

一般来说,让一种模式在另一种模式中工作是很困难的--许多键盘命令将发生冲突。但是,一些更基本的笔画,如缩进选项卡、换行符、注释(org将用#注释lisp代码,这是错误的)似乎可以让它们工作,并且会产生最大的影响。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15773354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档