[org] 如何缩进一堆代码块内的代码,有没有常用的发布样式?


文件里还有一堆这样的代码块,这里面缩进成这样了
不知道有没有一个命令能让他妈自动调整一下,而不是到其中按C-c ',然后缩进整块代码



这个样式发布的html好像太小了,各位有看着顺眼的样式吗
还有这个目录在左边这个设置我挺喜欢的,就是左边这栏颜色和样式不咋地(狗头

#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>

#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>

你要找的是不是

(setq org-edit-src-content-indentation 0)

卧槽,我都写了些什么

试试keyboard macro吧,解决你的重复劳动

C-x ( 开始定义,C-x ) 结束定义,C-x e 执行宏,之后连续 e 可以连续执行

另外 C-c C-v C-n 可以跳转到下一个源码块,对应 org-babel-next-src-block

所以你可以光标放在一个源码块上

C-x (

C-c '

C-x h

<TAB>

C-c '

C-c C-v C-n

C-x )

下面开始重复执行

C-x e e e e e e e

设置了以后该怎么办呢?
顺带说一下我的大部分代码块都是从markdown里的"```" 转为#+begin_src

@ringawho 好麻烦啊,其实我想参考子龙山人的代码,虽然这个配置在org-mode下好像不起作用

(defun indent-region-or-buffer()
  (interactive)
  (save-excursion
    (if (region-active-p)
	(progn
	  (indent-region (region-beginning) (region-end))
	  (message "Indent selected region."))
      (progn
	(indent-buffer)
	(message "Indent buffer.")))))

(global-set-key (kbd "C-M-\\") 'indent-region-or-buffer)

org-indent-block,不过需要挪到 begin_src/end_src 那一行操作。可以写个命令,带上 org-previous-block ,应该能满足缩进的需求

(defun claude/org-indent-block (arg &optional block-regexp)
  "Indent the block around point."
  (interactive "p")
  (org-previous-block arg block-regexp)
  (org-indent-block))

我只介绍使用键盘宏的方式,对于我来说是个特殊情况,所以我不会去搞一个配置的,在我看来这只是一个重复缩进代码块的问题,键盘宏可以很好的解决

至于过程我已经说的很清楚了

C-x ( 开始定义键盘宏

C-c ' 编辑源码块

C-x h 选中所有文本 (这个刚刚忘说了,抱歉,我再更改一下前面的回复)

<TAB> 格式化

C-c ' 退出编辑源码块

C-c C-v C-n 跳到下一个源码块

C-x ) 结束键盘宏的定义

定义完成之后,开始C-x e执行,执行会重复刚刚这里面的操作,进入编辑,选中,格式化,退出,跳转,之后一直按e重复执行

1 个赞

要不换种思路
平时调整缩进我都是用Tab键,有没有其他方法调整文本的缩进??

这里面东西是可以换的,我刚刚看了一下,indent-region好像可以格式化,我这是绑定在C-M-\的,<TAB>改用这个就可以

如果这个不行,你自己找一个可以用来格式化的命令,就算它没有绑定在键上也可以通过M-x ...来执行,键盘宏只是用来记录你按键的,只要合理都行

上面回复你了,不知道是没看到还是不满足需求?

附:支持 tab 缩进的一种实现方式

(defun claude-org/org-indent-block (arg &optional block-regexp)
  "Indent the block around point."
  (interactive "p")
  (let ((current-point (point)))
    (org-previous-block arg block-regexp)
    (org-indent-block)
    (goto-char current-point)))

(defun claude-org//org-cycle-advice (func &optional arg)
  "Advice around `org-cycle'."
  (if (org-in-block-p '("src"))
      (claude-org/org-indent-block arg)
    (funcall func arg)))

(advice-add 'org-cycle :around #'claude-org//org-cycle-advice)

org-indent-block这个函数好像不起作用啊,所以我对这个方案还是有点犹豫的,没去尝试

不清楚为什么不起作用 :joy:,正常是这样的

Screen Recording 2021-01-28 at 11.28.10 AM

他跟我说Not at a block

那就是我前面提到的,不是大问题,上面贴的函数已经做好处理了

(defun claude-org/org-indent-block (arg &optional block-regexp)
  "Indent the block around point."
  (interactive "p")
  (let ((current-point (point)))
    (org-previous-block arg block-regexp)
    (org-indent-block)
    (goto-char current-point)))

(defun claude-org//org-cycle-advice (func &optional arg)
  "Advice around `org-cycle'."
  (if (org-in-block-p '("src"))
      (claude-org/org-indent-block arg)
    (funcall func arg)))

(advice-add 'org-cycle :around #'claude-org//org-cycle-advice)

用了你这个配置,重启后好像也没什么用,跟开org-indent-mode有关吗??

无关

org-indent-block 基于 org-indent-region,你可以试一下手动选择代码块,执行 org-indent-region ,如果这也不能正常缩进,那就属于另外的问题了

org升级到9.4之后代码块内的编辑方式变得不可捉摸。。

对于Markdown文档的转换,建议试用Pandoc进行转换。可以解决绝大多数问题。

有这方面的教程吗 :slightly_smiling_face:

pandoc是命令行工具。使用下面的代码实现文档转换:

pandoc 源文档.md -o 目的文档.org

就可以了。

pandoc的安装你bing一下就能找到。很方便的。官方文档写的也非常清楚。如果需要可以在官网查看。