4

有没有一种好方法可以配置 vim 以发送包含悬挂缩进的 format=flowed 电子邮件?

我完整的 vimrc (用于测试目的)是:

set nocompatible
set fo+=awn 
set tw=72
set ai

我正在输入类似的内容:

 1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam 
    posuere dui lorem, et condimentum nulla. Sed pharetra justo nec ante 
    fringilla non mattis nisi blandit. Donec molestie ligula dolor. 
    Nulla facilisi. Aliquam vel nulla elit, mollis facilisis metus. Sed 
    id eros a ante blandit convallis id sit amet elit. Duis malesuada 
    lobortis leo a placerat. Sed ut ipsum nisl. Sed pretium mauris vitae 
    velit sollicitudin iaculis.

vim 为除最后一行之外的每一行添加一个尾随空格,每组 fo+=w。它还为悬挂缩进增加了空间。看起来不错!

我的邮件客户端设置了 format=flowed 标头。在 Mail.app 或 mutt 中查看此电子邮件的结果并不漂亮:

1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam     posuere dui lorem, et condimentum nulla. Sed pharetra justo nec ante     fringilla non mattis nisi blandit. Donec molestie ligula dolor.     Nulla facilisi. Aliquam vel nulla elit, mollis facilisis metus. Sed     id eros a ante blandit convallis id sit amet elit. Duis malesuada     lobortis leo a placerat. Sed ut ipsum nisl. Sed pretium mauris vitae     velit sollicitudin iaculis.

该段落正确换行,因为调整阅读器客户端的大小会重新排列它(这不是您在 stackoverflow 上看到的,但您明白了)。问题是,“Etiam”和“posuere”之间有 5 个空格,并且所有其他行已重新连接在一起。

vim 有解决这个问题的方法吗?或者这是 format=flowed 规范的限制?其他人如何处理这个问题?

4

1 回答 1

1

该段落正确换行,因为调整阅读器客户端的大小会重新排列它(这不是您在 stackoverflow 上看到的,但您明白了)。问题是,“Etiam”和“posuere”之间有 5 个空格,并且所有其他行已重新连接在一起。

这是RFC 3676中指定的“format=flowed”MIME 参数的限制。规范中没有任何内容允许客户端将前导空格识别为仅用于纯文本版本邮件的装饰。

RFC 的第 4.1 节规定:

如果一行的第一个字符是空格,则该行已被空格填充(参见第 4.4 节)。从逻辑上讲,在进一步检查该行之前(即,在检查是否流动之前),会删除该前导空格。

第 4.4 节中引用的“空间填充”:

空格填充在生成消息时需要保护的任何行的开头添加一个空格。在接收时,如果一行的第一个字符是空格,则逻辑上将其删除。这发生在对带引号的行(逻辑上计算并删除任何引号)的测试之后,以及在流式行的测试之前。

因此,符合 RFC 3676 的邮件客户端会从以此类字符开头的每一行中删除单个前导空格,然后(可选)删除单个空格字符之后的任何换行符。此过程不会触及剩余的前导空白

于 2017-08-15T17:44:52.593 回答