防止Vim在markdown中破坏标签中间的链接


16

假设我有这个Markdown文件:

[Lorem ipsum dolor sit ](http://vi.stackexchange.com/many-links-are-often-very)

看起来不错。但是链接没有完成,所以我输入-long,现在Vim中断了:

[Lorem ipsum dolor sit
](http://vi.stackexchange.com/many-links-are-often-very-long)

由于我的textwidth=80设置,...断开链接中间标签在技术上是有效的降价促销,但恕我直言,恕我直言;拥有漂亮外观的源文件是Markdown的重点。

随着gq这个问题往往是更糟糕:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
[Lorem ipsum dolor sit](http://vi.stackexchange.com/many-links-are-often-very-very-long)

变成这个:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec [Lorem
ipsum dolor
sit](http://vi.stackexchange.com/many-links-are-often-very-very-long)

有什么办法可以告诉Vim或markdown语法不以这种方式断开链接?

  • 也许将整个链接(从[))视为一个单词。
  • [this][type]对降价链接有同样的问题。

Answers:


9

过去,我在函数签名方面遇到过类似的问题。这是适合您问题的解决方案。添加到.vimrc

au CursorMovedI *.md call ModifyTextWidth() " Use only within *.md files

function! ModifyTextWidth()
    if getline(".")=~'^.*\[.*\](.*)$' " If the line ends with Markdown link - set big value for textwidth
        setlocal textwidth=500
    else
        setlocal textwidth=80 " Otherwise use normal textwidth
    endif
endfunction

注意,您可能需要更改'^.*\[.*\](.*)$'正则表达式。当前,如果链接后面有任何文本,则行可能会断开,如您的示例所示。但是,如果正则表达式匹配行内有链接的行,则可能会出现另一个问题:

Some info [here](https://www.google.com). Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris

在此示例中,未在其后插入换行符amet,,应手动添加。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.