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

287
jwir3

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

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

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

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

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

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

4

1 ответ на вопрос

3
Ingo Karkat

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

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

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

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

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

call OnSyntaxChange#Install('AutoPublish', '^autoPublishLine$', 1, 'a') autocmd User SyntaxAutoPublishEnterA setlocal textwidth=0 autocmd User SyntaxAutoPublishLeaveA setlocal textwidth=75 
Потрясающие. Этот плагин был именно то, что я искал. Спасибо! jwir3 6 лет назад 0