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

ein*_*ica 1 git vim word-wrap text-width

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

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

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

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

:set textwidth&
Run Code Online (Sandbox Code Playgroud)

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

附加信息:

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

fil*_*den 6

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

在这种情况下,它来自 file $VIMRUNTIME/ftplugin/gitcommit.vim,其中包括以下行:

setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72
Run Code Online (Sandbox Code Playgroud)

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

您可以使用名为的文件~/.vim/after/ftplugin/gitcommit.vim(假设您正在使用 Vim,如果您使用 NeoVim,路径的初始部分将不同。)该after目录用于最后加载的插件文件,因此通过放置您的文件在那里你可以确定你的代码会上面提到的之后运行。

在该文件中,您可以添加一个命令来撤销不需要的换行效果,例如:

setlocal textwidth&
Run Code Online (Sandbox Code Playgroud)

或者:

setlocal formatoptions-=t formatoptions-=l
Run Code Online (Sandbox Code Playgroud)

这两个设置中的任何一个都将防止在第 72 列自动断行。 更改'formatoptions'而不是重置的优点'textwidth'是,仅更改'formatoptions'您仍然可以使用命令,例如gq手动格式化文本块以符合 72 个字符的行宽限制,如果你想这样做。这样你就可以两全其美。

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

  • 如果您使用的是 Neovim,则正确的路径在 Linux 上是 `~/.config/nvim/after/ftplugin/gitcommit.vim` ,或者在 Windows 上是 `$env:LOCALAPPDATA/nvim/after/ftplugin/gitcommit.vim` 。 (5认同)
  • 我不明白为什么你建议两个选项,然后告诉我确定并只使用其中之一。或者-我误解了你的最后一句话吗?另外,“setlocal textwidth&”有效,“formatoptions-=tc”则无效... (2认同)