특정 줄에 대해 vim의 텍스트 너비를 어떻게 비활성화할 수 있나요?

특정 줄에 대해 vim의 텍스트 너비를 어떻게 비활성화할 수 있나요?

저는 textwidth80자로 설정했고, 파일은 75자로 설정했습니다 gitcommit.

문제는 우리 회사의 git 커밋에는 항상 커밋에 대한 일부 메타데이터(버전 번호 충돌 여부, 관련 티켓 등...)를 나타내는 마지막 줄이 있다는 것입니다. 내가 하고 싶은 것은 이 마지막 줄의 텍스트 너비를 끄는 것입니다. 이 마지막 줄은 항상 "(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.vimGit 커밋 메시지에 자동으로 적용되도록 해당 명령을 에 넣을 수 있습니다 .

대안

패턴의 중복을 피하기 위해,OnSyntaxChange 플러그인:autocmd기본 구문 그룹의 변경 사항에 반응하는 를 설정할 수 있습니다 . 기본적으로 위의 솔루션과 유사하게 작동하지만 훨씬 더 정교한 수준에서 작동합니다.

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

관련 정보