如何在组织模式下自动格式化源代码块


11

当我使用组织模式来记一本书的笔记时,有时我会将一些代码片段复制/粘贴到笔记文件中。粘贴后,我将

1. `C-c '` to call `org-edit-special`
2. `C-x h` to mark all the source code
3. `TAB` to format it

是否有组织模式的解决方案,在将代码粘贴到中后#+BEGIN_SRC...#+END_SRC,它将自动格式化代码块,或者我可以只使用一个键TAB来格式化(缩进)整个源代码块?

默认值TAB(在块中键入,不使用C-c ')只是将所有行对齐#+BEGIN_SRC标题后的第2列,如果第二行的开头有空格,则只会添加更多空格,不会像3步那样缩进所有行。

Answers:


7

以下是一个困难的解决方案,但它可以完美地工作。实际上,它只是一个模拟您的操作并使用a run-at-time使其每10秒被调用一次的函数。干杯。

(defun indent-org-block-automatically ()
  (when (org-in-src-block-p)
   (org-edit-special)
    (indent-region (point-min) (point-max))
    (org-edit-src-exit)))

(run-at-time 1 10 'indent-org-block-automatically)

当然,您可以每1秒调用一次,只需将10更改为1。


我不需要run-at-time实际上,我绑定了怎么TAB键做的这些替换默认TABorg-in-src-block-p。默认值TAB已绑定,yas-expand但是它将按照我在帖子中所说的进行操作。
CodyChan 2014年


0

这是我为解决此问题而编写的代码:

(defun udf/my-org-tab-dwim (&optional arg)
  (interactive)
  (or (org-babel-do-key-sequence-in-edit-buffer (kbd "TAB"))
      (org-cycle arg)))

(define-key org-mode-map
  (kbd "<tab>") #'udf/my-org-tab-dwim)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.