![Как отключить ширину текста в vim для определенных строк?](https://rvso.com/image/1543340/%D0%9A%D0%B0%D0%BA%20%D0%BE%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%20%D0%B2%20vim%20%D0%B4%D0%BB%D1%8F%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%3F.png)
Я 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позволяет вам настроить :autocmd
s, которые реагируют на изменения в базовой синтаксической группе. В основном это работает как решение выше, но на гораздо более сложном уровне.
call OnSyntaxChange#Install('AutoPublish', '^autoPublishLine$', 1, 'a')
autocmd User SyntaxAutoPublishEnterA setlocal textwidth=0
autocmd User SyntaxAutoPublishLeaveA setlocal textwidth=75