Vim:换行文本(“gq”)而不修改带下划线的标题

时间:2010-04-21 11:45:06

标签: formatting markdown text-formatting vim

有没有办法在Vim中格式化文本以尊重带下划线的标题?

在Markdown中,有两种表示标题的方式:

#Level 1 heading
##Level 2 heading
###Level 3 heading

和1级&仅限2:

Level 1 heading
===============

Level 2 heading
---------------

我喜欢下划线的风格,因为我觉得它看起来更好。

当我在Vim中使用:set textwidth=72撰写降价时,我希望能够使用gggqG重新格式化整个文档,但它会将这些带下划线的标题视为段落,并将它们挤压在一起在一条线上。所以如果我开始使用以下内容:

Lorem ipsum
===========

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. 

在整篇文章中运行gq后,我最终会得到类似的结果:

Lorem ipsum ===========

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. 

有什么方法可以阻止Vim格式化带下划线的标题?

我认为必须有使用formatexprformatprg的解决方案。我已经研究了par的文档,尽管它非常强大,但它看起来好像不是它的一个特性。所以我想知道是否有另外一个可以与formatprg理解降价的外部程序一起使用,或者是否可以使用带有formatexpr设置的vimscript来实现。

2 个答案:

答案 0 :(得分:6)

sorta 的一个选项是将下划线字符串添加到comments变量。

如果您的下划线字符串是固定大小,您可以只添加以下内容:

:set comments+=:---------------,:===============

如果它们的大小可变(多于一个):

:set comments+=n:--,n:==

使用多于一个允许段落以单个-=开头,并使后续行与注释字符串保持一致。

删除上面的+,只为这些字符串设置注释,而不是添加它们。

在某些情况下,格式化会出乎意料地发生(例如,连续行上的下划线)。我确信有更合适的方法可以做到这一点,但希望这会让你开始。

:h comments
:h format-comments
:h formatoptions
:h fo-table

答案 1 :(得分:0)

至少你可以为它设置一些宏。

E.g。在第一段上以某种方式对文本进行定位,搜索第一个标题 - 下划线然后向下移动2行,然后视觉选择该区域到下一个下划线减去3行,然后格式化它:

qa/^===========$/jjv/^===========$/-3<CR>gqq

现在您可以使用a宏。

HTH