假设我有这个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]有相同的问题。


#1 楼

过去,函数签名存在类似的问题。这是适合您问题的解决方案。添加到.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,之后未插入换行符,应手动添加。