特定の行に対して vim のテキスト幅を無効にするにはどうすればいいですか?

特定の行に対して vim のテキスト幅を無効にするにはどうすればいいですか?

私はtextwidth80 文字に設定し、gitcommitファイルの場合は 75 文字に設定しました。

問題は、私の会社の Git コミットには常に、コミットに関するメタデータ (バージョン番号を上げるかどうか、関連するチケットなど) を示す最後の行があることです。私がやりたいのは、この最後の行のテキスト幅をオフにすることです。この最後の行は常に「(patch)」、「(minor)」、または「(major)」(semver 自動公開用) で始まります。

現在、構文ファイルで次のようにして、このメタデータ行が強調表示されるようにしています。

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

これは期待通りに動作しますが、私が本当にやりたいのはまたこの行のテキスト幅を設定解除して、この 1 行の単語が折り返されないようにします。

これについてどうしたらよいか、何かアイデアはありますか?

答え1

簡単なハックとして、'textwidth'カーソルが移動するたびに値を調整できます。

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

このコマンドを に配置する~/.vim/ftplugin/gitcommit_textwidth.vimと、Git コミット メッセージに自動的に適用されます。

代替

パターンの重複を避けるために、私のOnSyntaxChangeプラグイン基礎となる構文グループの変更に反応するを設定できます:autocmd。基本的には上記のソリューションと同じように機能しますが、はるかに複雑なレベルです。

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

関連情報