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

nel*_*rom 6 vim formatting markdown text-formatting

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

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

#Level 1 heading
##Level 2 heading
###Level 3 heading
Run Code Online (Sandbox Code Playgroud)

仅适用于1级和2级:

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

Level 2 heading
---------------
Run Code Online (Sandbox Code Playgroud)

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

比如说,当我在Vim中写下markdown时: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. 
Run Code Online (Sandbox Code Playgroud)

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. 
Run Code Online (Sandbox Code Playgroud)

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

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

Cur*_*son 6

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

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

:set comments+=:---------------,:===============
Run Code Online (Sandbox Code Playgroud)

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

:set comments+=n:--,n:==
Run Code Online (Sandbox Code Playgroud)

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

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

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

:h comments
:h format-comments
:h formatoptions
:h fo-table
Run Code Online (Sandbox Code Playgroud)