Как отключить ширину текста в vim для определенных строк?

Как отключить ширину текста в vim для определенных строк?

Я textwidthустановил 80 символов, а для файлов — 75 символов gitcommit.

Дело в том, что коммиты git в моей компании всегда имеют последнюю строку, которая указывает некоторые метаданные о коммите (будь то увеличение номера версии, связанный тикет и т. д.). Я бы хотел отключить textwidth для этой последней строки. Эта последняя строка всегда будет начинаться с "(patch)", "(minor)" или "(major)" (для автоматической публикации semver).

В настоящее время я делаю так, чтобы эта строка метаданных была выделена, используя следующее в моем файле синтаксиса:

syn match   autoPublishLine     "^\((patch)\|(minor)\|(major)\).*"
hi def link autoPublishLine             Special

Это работает так, как я и ожидал, но что мне действительно хотелось бы сделать, так этотакжеотменяет установку ширины текста для этой строки, поэтому перенос слов для этой строки не выполняется.

Есть идеи, как это можно сделать?

решение1

В качестве быстрого трюка вы можете адаптировать 'textwidth'значение при каждом перемещении курсора:

:autocmd CursorMoved,CursorMovedI <buffer> let &l:textwidth = (getline('.') =~# '^\((patch)\|(minor)\|(major)\)' ? 0 : 75)

Эту команду можно поместить ~/.vim/ftplugin/gitcommit_textwidth.vimтак, чтобы она автоматически применялась к сообщениям коммитов Git.

Альтернатива

Чтобы избежать дублирования рисунка, мойПлагин OnSyntaxChangeпозволяет вам настроить :autocmds, которые реагируют на изменения в базовой синтаксической группе. В основном это работает как решение выше, но на гораздо более сложном уровне.

call OnSyntaxChange#Install('AutoPublish', '^autoPublishLine$', 1, 'a')
autocmd User SyntaxAutoPublishEnterA setlocal textwidth=0
autocmd User SyntaxAutoPublishLeaveA setlocal textwidth=75

Связанный контент