[已解决] 如何快速选中和格式化 org-mode 中的代码块

C-c ' C-x h 选择有点复杂,有没有更简单直观一点的做法呢?

还有就是有没有比较好的格式化方案能支持 C-c ' 啊?目前在用猫大的 refresh-file 格式化 elisp 但不支持 C-c ' 的临时 buffer。

我用这个函数来复制当前的代码块,按这个糊一下应该很快,然后绑定在一个快捷键上就行了。

(defun org-copy-src-block ()
  (interactive)
  (org-edit-src-code)
  (mark-whole-buffer)
  (kill-ring-save nil nil t)
  (org-edit-src-abort))
1 个赞

:grimacing: 你提醒了我,Emacs 里任何操作都有一个函数对应,我应该写个函数把需要的复制、格式化功能包裹起来。

转念一想,这个功能应该由 org-mode 或 format/lint 之类的插件来提供才对啊。

可能没有那么强的需求吧。

format/lint 之类的插件我感觉不应该管这个,只应该关注 buffer 就行,不然的话是不是应该给 markdown 或是其他的格式也提供一个同样的功能。

我研究一下看看是不是该用 mmm-mode/poly-mode 管理 org 中的代码块。

update

可能是我想复杂了,直接在临时 buffer 调出 indent-buffer 函数应该是最简单的方法了。

;; ---- org代码块相关的设置
(setq org-src-fontify-natively 1);代码块语法高亮
(setq org-src-tab-acts-natively 1);开启代码块语法缩进
(setq org-edit-src-content-indentation 0);代码块初始缩进范围

org中的代码块也可以按tab键来格式化,可以不用专门开一个临时buffer来格式化

1 个赞

太厉害了!感谢感谢 :pray: