在Emacs中使用悬挂缩进填充Markdown样式列表项

时间:2013-03-02 16:05:33

标签: emacs elisp markdown

我希望Emacs使用悬挂式缩进来包装Markdown样式的列表项。事实上,即使在fundamental-mode中,这也很有效。请考虑以下三个列表项:

* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

- Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

使用M-qfill-paragraph)填充时,结果为

* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
  eiusmod tempor incididunt ut labore et dolore magna aliqua.

- Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
  nisi ut aliquip ex ea commodo consequat.

+ Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur.

请注意,前两个是我喜欢的,但最后一个不是。我无法理解为什么在最后一种情况下行为不同,以及如何正确地修改它。

fill-paragraph源代码中的注释表明已尝试以下步骤:

  
      
  1. 如果在交互式调用时处于活动状态,请填写该区域。
  2.   
  3. 试试fill-paragraph-function
  4.   
  5. 尝试我们的语法识别填充代码。
  6.   
  7. 如果全部失败,默认为好的'文字段填写。
  8.   

当我按M-q填充这些列表项时,没有活动区域,所以 应跳过第1步。我还没有定义fill-paragraph-function (我在fill-paragraph-function)中验证nilfundamental-mode

这意味着我们进入第三步。在fundamental-mode中,全部三个 列表标记具有相同的语法(与describe-char验证):

character: * (displayed as *) (codepoint 42, #o52, #x2a)
   syntax: _    which means: symbol

character: - (displayed as -) (codepoint 45, #o55, #x2d)
   syntax: _    which means: symbol

character: + (displayed as +) (codepoint 43, #o53, #x2b)
   syntax: _    which means: symbol

因此,我不明白为什么这一步会对待这些 段落不同。在查看来源时,似乎就是这样 只是试图处理评论,所以我认为相信三是被跳过 以上案例。

所以,似乎我们转向第四步,利用了 paragraph-start。我尝试将paragraph-start设置为以下内容 (允许在标记之前的空格):

"\f\\|[ \t]*$\\|^[ \t]*[*+-] "

这也不起作用,所以我对如何使这项工作感到茫然。

我是否需要编写自定义填充段落功能,或者是否有 更简单的方法?

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是使用adaptive-fill-regexp。此变量是一个正则表达式,它匹配构成缩进的行开头的文本。在上述情况中,我们希望列表标记计入缩进。

在前两种情况下,这些标记已经处于默认值adaptive-fill-regexp,如fill.el中所定义:

"[ \t]*\\([-–!|#%;>*·•‣⁃◦]+[ \t]*\\)*"

请注意,虽然第一组中的字符集中有许多不同的项目符号,但加号(+)不是。对于上述三种情况,以下是诀窍:

"[ \t]*\\([*+-][ \t]*\\)*"

答案 1 :(得分:0)

我认为你只需要从Elpa / package.el更新你的降价模式(也许可以获得降价模式+)

确保你有奶罐,橘子酱回收。

我刚试了一下这个用例....注意markdown-mode / markdown-mode的版本+

enter image description here