首页 > 解决方案 > 在 vim 中编辑 git commit 消息时防止自动换行

问题描述

我想做与这个问题相反的事情:

在 Vim 中自动包装长的 Git 提交消息

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

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

:set textwidth&

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

附加信息:

标签: gitvimword-wraptext-width

解决方案


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

在这种情况下,它来自 file $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'而不是重置的优点'textwidth'是,仅通过更改'formatoptions'您仍然可以使用命令,例如gq手动格式化文本块以符合 72 个字符的行宽限制,如果你想这样做。这样你就可以两全其美了。

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


推荐阅读