在 vim 中编辑 git 提交消息时防止自动换行

Prevent automatic line wrapping when editing git commit message in vim

我想做这个问题的反面:

Automatically wrap long Git commit messages in Vim

不知何故,git 决定将我的提交消息包装成 72 个字符。我根本不希望它们被包裹起来......而且我没有做任何事情来启用包裹。

现在,当我已经在编辑提交评论时,我当然可以输入:

:set textwidth&

这将停止包装,但我不想每次都这样做。

附加信息:

您正在获取 git 提交消息的这些设置,因为 Vim 识别文件类型 (gitcommit) 并为其加载特定于文件类型的设置。

在本例中,它来自文件 $VIMRUNTIME/ftplugin/gitcommit.vim,其中包括以下行:

setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72

您可以通过将 gitcommit 的另一个文件类型插件添加到您的主目录来覆盖它,该插件将在 Vim 运行 时间之后加载。

您可以使用名为 ~/.vim/after/ftplugin/gitcommit.vim 的文件执行此操作(假设您使用的是 Vim,如果您使用 NeoVim,则路径的初始部分将有所不同。) after 目录用于最后加载的插件文件,因此通过将文件放在那里,您将确保您的代码 运行 上面提到了一个。

在该文件中,您可以添加一个命令来撤消换行的不良影响,例如:

setlocal textwidth&

或者:

setlocal formatoptions-=t formatoptions-=l

这两个设置中的任何一个都将防止在第 72 列自动换行。更改 'formatoptions' rather than resetting 'textwidth' is that by only changing 'formatoptions' you can still use commands such as gq 以手动格式化文本块以符合 72 个字符的行宽限制的优点,如果您愿意的话所以。这样你就可以两全其美了。

无论您决定设置两个选项中的哪个,请确保您使用 :setlocal 而不是 :set,因为该插件仅为该缓冲区加载,您应该尝试只修改选项单独在该缓冲区上并避免触及全局选项。

另一种方法是向您的 vimrc 添加一个自动命令。如果您在

之后的任何时间添加它
filetype plugin on

行,它将覆盖 ftplugin 中的任何内容。我用它来关闭 git 提交中的包装。

" Stops gitcommit from auto wrapping
au Filetype gitcommit call SetGitCommit()
func SetGitCommit()
    setlocal formatoptions-=tl
endfunc