1

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

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

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

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

:set textwidth&

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

附加信息:

  • 我正在使用 Devuan GNU/Linux 3 (~= Debian 10)。
  • :set ft?filetype=gitcommit
  • 当我刚刚启动 vim 或使用 vim 编辑任何现有文件时,不会发生换行。
4

2 回答 2

6

您正在为 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,因为该插件仅针对该缓冲区加载,您应该尝试仅修改该缓冲区上的选项并避免接触全局选项。

于 2020-03-16T15:12:45.637 回答
2

另一种方法是在你的 vimrc 中添加一个自动命令。如果您在您之后的任何时间添加它

filetype plugin on

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

" Stops gitcommit from auto wrapping
au Filetype gitcommit call SetGitCommit()
func SetGitCommit()
    setlocal formatoptions-=tl
endfunc
于 2021-08-06T22:17:22.293 回答