Cách tự động định dạng khối mã nguồn ở chế độ org


11

Khi tôi đang sử dụng chế độ org để ghi chú về một cuốn sách, đôi khi tôi sẽ sao chép / dán một số đoạn mã vào tệp ghi chú. Sau khi dán nó, tôi sẽ

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

Có một giải pháp trong chế độ org cho tôi rằng, sau khi dán mã vào #+BEGIN_SRC...#+END_SRC, nó sẽ tự động định dạng khối mã hoặc tôi có thể sử dụng chỉ một khóa như TABđịnh dạng (thụt lề) toàn bộ khối mã nguồn?

Mặc định TAB(được nhập trong khối, không sử dụng C-c ') chỉ căn chỉnh tất cả các cột 2 dòng sau #+BEGIN_SRCtiêu đề, nếu có khoảng trắng ở đầu dòng thứ hai, nó sẽ chỉ thêm nhiều khoảng trắng, nó sẽ không thụt vào tất cả các dòng như 3 bước.

Câu trả lời:


7

Dưới đây là một giải pháp cứng, nhưng nó hoạt động hoàn hảo. Trên thực tế, đây chỉ là một chức năng mô phỏng các hoạt động của bạn và sử dụng một run-at-timeđể làm cho nó được gọi cứ sau 10 giây. Chúc mừng.

(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)

Tất nhiên, bạn có thể gọi nó sau mỗi 1 giây, chỉ cần thay đổi 10 thành 1.


Tôi run-at-timethực sự không cần , làm thế nào tôi có thể ràng buộc TABchìa khóa để thực hiện những điều này để thay thế mặc định TABkhi nào org-in-src-block-p. Mặc định TABbị ràng buộc yas-expandnhưng nó sẽ làm những điều như tôi đã nói trong bài viết của mình.
CodyChan


0

Đây là mã tôi đã viết để giải quyết vấn đề này:

(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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.