Предотвратить Vim от разрыва ссылок в середине тега в уценке

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настроек ... Хотя разрыв средней ссылки является технически допустимой уценкой, это выглядит очень неприглядно ИМХО; хорошо выглядящие исходные файлы являются своего рода точкой уценки.

С 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 или синтаксису уценки, чтобы таким образом не разрывать ссылки?

  • Может быть, рассматривая всю ссылку (от [до )) как одно слово.
  • У меня такая же проблема с [this][type]уценкой.
Мартин Турной
источник

Ответы:

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,и должен быть добавлен вручную.

Jarlax
источник