如何禁用 vim 特定行的文本宽度?

如何禁用 vim 特定行的文本宽度?

我已textwidth设置为 80 个字符,并且将文件设置为 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.vim以便它自动应用于 Git 提交消息。

选择

为了避免重复这种模式,我的OnSyntaxChange 插件使您可以设置:autocmd对底层语法组的变化作出反应的 s。它基本上与上述解决方案类似,但层次要复杂得多。

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

相关内容