【问题标题】:Prevent automatic line wrapping when editing git commit message in vim在 vim 中编辑 git commit 消息时防止自动换行
【发布时间】:2020-06-27 15:14:58
【问题描述】:

我想做这个问题的反面:

Automatically wrap long Git commit messages in Vim

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

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

:set textwidth&

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

附加信息:

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

【问题讨论】:

  • 将您的设置保存在 vim 配置文件中?
  • 当你编辑一个 Vim 提交时,它报告什么文件类型? :set ft? 的输出是 gitcommit 还是 commit 或类似的东西?知道文件类型后,您可以为其添加覆盖。
  • @evolutionxbox:“我的设置”正在被覆盖。当我刚启动 vim 时,这不会发生。
  • @filbranden:见编辑

标签: git vim word-wrap text-width


【解决方案1】:

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

在这种情况下,它来自文件$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,因为该插件仅针对该缓冲区加载,您应该尝试仅修改该缓冲区上的选项并避免感人的全局选项。

【讨论】:

  • 我不明白你为什么建议两个选项,然后告诉我确保并且只使用其中一个。或者——我误解了你的最后一句话吗?此外,setlocal textwidth& 有效,formatoptions-=tc 无效...
  • @einpoklum 两者中的任何一个都会阻止自动换行符。您可以将两者设置在一起,但其中任何一个都足够了。最后一句话是关于使用:setlocal 而不是:set 与它们中的任何一个!我会改写一下,这样看起来更好。
  • 您在第二个选项中有错字,它显示的是“formatoptions-=tc”,但应该显示的是“formatoptions-=tl”。
  • 感谢@Rafał,很棒的收获!我刚刚编辑了答案以修复它。难怪 einpoklum 遇到麻烦了……干杯!
  • 关于set formatoptions-=abc :我发现-= 在减去一组字母标志时不能按预期工作。它仅在'formatoptions' 包含abc 作为子字符串 时才有效,即它包含字母abc 按此确切顺序之间没有其他字母他们。否则什么都不会发生。您应该将它们一一删除。
【解决方案2】:

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

filetype plugin on

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

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

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2011-12-07
    • 2021-11-23
    相关资源
    最近更新 更多