Como posso desativar a largura de texto do vim para linhas específicas?

Como posso desativar a largura de texto do vim para linhas específicas?

Eu textwidthconfigurei para 80 caracteres e 75 caracteres para gitcommitarquivos.

Acontece que os commits do git na minha empresa sempre têm uma última linha que indica alguns metadados sobre o commit (seja para aumentar o número da versão, o ticket associado, etc...). O que eu gostaria de fazer é desligar a largura do texto desta última linha. Esta última linha sempre começará com "(patch)", "(minor)" ou "(major)" (para publicação automática semver).

Atualmente tenho isso para que esta linha de metadados fique destacada, usando o seguinte em meu arquivo de sintaxe:

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

Isso funciona como eu esperava, mas o que eu realmente gostaria de fazer étambémdesmarque a largura do texto para esta linha, para que não envolva palavras nesta linha.

Alguma ideia de como posso fazer isso?

Responder1

Como um truque rápido, você pode adaptar o 'textwidth'valor sempre que o cursor se mover:

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

Você pode colocar esse comando ~/.vim/ftplugin/gitcommit_textwidth.vimpara que ele se aplique automaticamente às mensagens de commit do Git.

Alternativa

Para evitar a duplicação do padrão, meuPlug-in OnSyntaxChangepermite configurar :autocmds que reagem a alterações no grupo de sintaxe subjacente. Basicamente funciona como a solução acima, mas em um nível muito mais elaborado.

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

informação relacionada