org-modeでソースコードブロックを自動フォーマットする方法


11

org-modeを使用して本に関するメモをとっているときに、コードスニペットをコピーしてメモファイルに貼り付ける場合があります。貼り付けたら、

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ソースコードブロック全体をフォーマットする(インデントする)ために1つのキーだけを使用できるという解決策は、組織モードにありますか?

デフォルトTAB(を使用せずにブロックに入力C-c ')は、#+BEGIN_SRCヘッダーの2列後にすべての行を揃えるだけです。2行目の先頭にスペースがある場合、スペースが追加されるだけで、3つのステップのようにすべての行がインデントされません。

回答:


7

以下は難しい解決策ですが、完璧に機能します。実際には、それはあなたの操作をシミュレーションする関数であり、run-at-time10秒ごとに呼び出されるようにa を使用します。乾杯。

(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デフォルトを置き換えるためにこれらを行うためのキーTABときにorg-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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.