本节介绍用于对区域内所有行进行缩进的命令。它们的返回值无确定意义。
该命令对起始于 start(包含)与 end(不包含)之间的所有非空行进行缩进。
如果 to-column 为 nil,indent-region 会调用当前模式的缩进函数(即 indent-line-function 的值)对每一行非空行缩进。
如果 to-column 非 nil,它应当是一个整数,用于指定缩进的列数;
此时该函数会通过添加或删除空白字符,为每一行设置精确的缩进量。
如果存在填充前缀,indent-region 会让每一行以该填充前缀开头来实现缩进。
该变量的值是一个可被 indent-region 用作快捷方式的函数。
它应接收两个参数:区域的起始位置与结束位置。
你设计的函数应当与逐行缩进区域的效果一致,但通常速度更快。
如果值为 nil,则无快捷方式,indent-region 会实际逐行处理。
快捷函数在 C 模式、Lisp 模式等模式中非常有用,
这些模式下的 indent-line-function 需要从函数定义开头扫描;
逐行应用会导致时间复杂度为平方级。
快捷方式可以在逐行缩进时更新扫描信息,使时间复杂度降为线性。
在单行缩进速度很快的模式中,则无需快捷方式。
带有非 nil 参数 to-column 的 indent-region 含义不同,不会使用该变量。
该函数将起始于 start(包含)与 end(不包含)之间的所有行整体横向移动 count 列。 这会保持受影响区域的形状,将其作为一个刚性整体移动。
它不仅可用于缩进未排版的文本区域,也可用于缩进已格式化的代码区域。 例如,如果 count 为 3,该命令会为指定区域内每一行增加 3 列的缩进。
以交互方式调用且无前缀参数时,该命令会进入一个临时模式,用于刚性调整缩进。 See Indentation Commands in The GNU Emacs Manual。
该命令与 indent-rigidly 类似,区别是它不会修改位于字符串或注释内部的行。
此外,如果 nochange-regexp 非 nil 且在行首匹配成功,则不会修改该行。