重排(Filling)指通过移动换行符调整行长度,使其接近但不超过指定最大宽度。
此外,还可以对行进行对齐(justified),即插入空格使左右页边距精确对齐。
宽度由变量 fill-column 控制。为便于阅读,行宽最好不超过 70 列左右。
你可以使用自动重排模式(see 自动换行)在输入文本时自动重排, 但对已有文本的修改可能导致排版混乱,这时需要显式重排。
本节大部分命令的返回值无实际意义。所有执行重排的函数都会参考当前左右边距与对齐样式(see 填充边距)。
若当前对齐样式为 none,重排函数不会执行任何实际操作。
多个重排函数包含参数 justify。若其非空,则表示执行某种对齐。
取值可为 left、right、full 或 center,分别指定对应对齐方式。
若为 t,表示使用当前文本的对齐样式(见下方 current-justification)。
其他值均按两端对齐处理。
交互调用重排函数时,使用前缀参数会使 justify 取值为 full。
该命令重排光标所在或之后的段落。若 justify 非空,同时对每行执行对齐。 它使用标准段落移动命令查找段落边界。See Paragraphs in The GNU Emacs Manual。
若 region 非空,且开启临时标记模式并激活标记,则该命令调用 fill-region
重排选区内所有段落,而非仅当前段落。交互调用时 region 为 t。
该命令重排从 start 到 end 选区内的每个段落。 若 justify 非空,同时执行对齐。
若 nosqueeze 非空,表示保留换行符以外的空白不压缩。
若 to-eop 非空,表示一直重排到段落末尾;若开启 use-hard-newlines,则到下一个硬换行符为止(见下文)。
变量 paragraph-separate 控制段落识别方式。See 编辑中使用的标准正则表达式。
大多数 Emacs 缓冲区使用等宽文本,因此所有重排函数(如 fill-region)
均基于字符数量与 char-width 工作。但 Emacs 可以渲染包含图片、比例字体等内容,
而 pixel-fill-region 就是用于处理这类情况。它以像素为粒度重排 start 到 end
之间的文本,使使用变宽字体或多种字体的文本排版整齐。参数 pixel-width 指定重排后行的最大像素宽度,
相当于 fill-region 中 fill-column 的像素版。例如,下面这段 Lisp 代码会插入使用比例字体的文本,
并将其重排至宽度不超过 300 像素:
(insert (propertize "This is a sentence that's ends here." 'face 'variable-pitch)) (pixel-fill-region (point) (point-max) 300)
若 start 不在行首,则 start 对应的水平像素位置会作为后续行的缩进前缀。
辅助函数 pixel-fill-width 可用于计算所需像素宽度。无参数时返回略小于当前窗口宽度的值。
第一个可选参数 columns 指定标准等宽字体下的列数,例如 fill-column。
第二个可选参数为目标窗口。典型用法如下:
(pixel-fill-region start end (pixel-fill-width fill-column))
该命令按各自的重排前缀重排选区内的每个段落。因此,若段落行原本以空格缩进, 重排后仍会保持相同缩进样式。
前两个参数 start 与 end 是待重排选区的起止位置。 第三、四个参数 justify 与 citation-regexp 为可选。 若 justify 非空,段落会在重排同时对齐。 若 citation-regexp 非空,表示处理邮件正文,不重排邮件头行。 若为字符串,则作为正则表达式;匹配行首的行被视为引用标记行。
通常,fill-individual-paragraphs 将缩进变化视为新段落开始。
若 fill-individual-varying-indent 非 nil,则只有分隔行才能分隔段落。
该模式可以处理首行额外缩进的段落。
该变量用于改变上述 fill-individual-paragraphs 的行为。
该命令将整个选区视为单个段落进行重排。若选区原本包含多个段落,段落间空行会被移除。 若 justify 非空,同时执行对齐。
若 nosqueeze 非空,表示保留换行符以外的空白。 若 squeeze-after 非空,指定选区内一个位置,该位置之前的空白(换行除外)保持不变。
在自适应重排模式下,该命令默认调用 fill-context-prefix 选择重排前缀。See 自适应填充模式。
该命令在当前行单词间插入空格,使行尾精确对齐 fill-column。返回 nil。
参数 how 若非空,显式指定对齐样式,可为 left、right、full、center 或 none。
若为 t,表示使用当前对齐样式(见下方 current-justification)。
nil 表示执行两端对齐。
若 eop 非空,表示当 current-justification 为两端对齐时仅执行左对齐。
用于段落最后一行—即使整体两端对齐,末行也不应两端对齐。
若 nosqueeze 非空,表示不修改行内部空白。
该变量指定无文本属性声明对齐样式的文本所使用的对齐方式。
可选值为 left、right、full、center 或 none。默认值为 left。
该函数返回光标周围文本重排应使用的对齐样式。
返回光标处 justification 文本属性的值;若无该属性,则返回变量 default-justification。
但表示“不对齐”时返回 nil 而非 none。
若该变量非 nil,句点后仅跟一个空格不算句子结束,重排函数会避免在此处换行。
若该变量非 nil,句子可以不以句点结束。用于泰语等语言,句子以双空格结束而非句点。
若该变量非 nil,应为一个字符串,其中字符可作为句子结尾且后面无需跟空格。
若该变量非 nil,重排时将一行末尾与下一行开头的不同语言单词(如英文与中日韩文字(CJK))之间插入空格。
该变量提供覆盖段落重排行为的方式。若值非空,fill-paragraph 会调用该函数完成工作。
若函数返回非 nil,fill-paragraph 认为任务已完成并直接返回该值。
该功能通常用于编程语言模式下的注释重排。若函数需要按普通方式重排段落,可使用如下代码:
(let ((fill-paragraph-function nil)) (fill-paragraph arg))
该变量提供覆盖 fill-region、fill-paragraph 等重排函数向后跳转段落方式的能力。
值应为一个函数,接收参数 n 表示跳转段落数,返回 n 与实际跳转段落数的差值。
默认值为 forward-paragraph。See Paragraphs in The GNU Emacs Manual。
若该变量非 nil,重排函数不会删除带有 hard 文本属性的换行符。
这类硬换行符充当段落分隔符。See Hard and Soft Newlines in The GNU Emacs Manual.