【问题标题】:Automatically wrap long Git commit messages in Vim在 Vim 中自动包装长的 Git 提交消息
【发布时间】:2012-06-16 21:38:17
【问题描述】:

使用 Git,我的提交编辑器是 Vim。我在记住换行方面一直做得很差,所以我的行很长(例如,参见this answer)。有没有办法使用一些 git config.vimrc 魔法让 Vim 自动换行 72 列?

Related question.

【问题讨论】:

  • 您链接到的问题建议在您的.vimrc 中设置'textwidth' 选项。这不符合您的需求吗?
  • @JoshLee -- 我的印象是全局设置最大宽度。我只想在 git-commit 消息中设置宽度。
  • @RemcoOverdijk -- 具有讽刺意味的是,这是我试图作为相关问题发布的链接。我不知道我是如何获得另一个链接的(实际上,当我关注它时,我记得第一次看到它)......无论如何,要清楚我 只想在 git commit 中强制换行 而且我不是 .vimrc 格式方面的专家(对我来说这一切都像是一门外语)。

标签: git vim word-wrap commit-message


【解决方案1】:

2018 更新 - 更新 vim

如果您更新 vim,它将自动突出显示标题的前 50 个字符并在 72 个字符处换行。它知道你正在编辑一个 git 提交文件。


Mac 用户可以使用Homebrew:

brew install vim

如果您仍然没有看到语法突出显示,请确保您拥有它enabled

您需要在.vimrc 文件as per arch linux documentation 中进行以下设置

filetype plugin on
syntax on

【讨论】:

    【解决方案2】:

    除了其他答案,在编辑时使用gqip 重新格式化段落。

    Vim Tips Wiki: Automatic formatting of paragraphs

    【讨论】:

    • 这是一个非常有用的提示!谢谢!
    【解决方案3】:

    将此添加到您的.vimrc

    au FileType gitcommit setlocal tw=72
    

    【讨论】:

    • 该设置应该已经存在于.../vim73/ftplugin/gitcommit.vim 中,除非您设置了自己的文本宽度。
    • 这仅在设置formatoption t 时有效。使用:set fo? 检查:set fo+=t 进行更正。
    • 要使用此解决方案,您的 .vimrc 中也需要 :filetype on。这使 vim 能够检查文件类型并在这种情况下查看您正在编辑 gitcommit 文件。 @Henning 也是正确的,你需要一个包含 t 的 fo 来换行 textwidth。但是,据我了解,这是默认设置,但仍然是一个故障点。
    • 我不得不在我的 .vimrc 中说 filetype plugin on
    【解决方案4】:

    早期帖子中的几个选项都有效,但我注意到不同系统之间存在不一致。

    Fedora 28(最近从 F26 升级)很容易,一旦我意识到:git-commit/git-tag 中的版本显示它指向 .virc 文件(奇怪*),所以我只是复制了我的 ~/.vi mrc 进入 ~/.virc [除了,见下文]。

    根据:verbose :set tw=?,带有来自brew 的vim 8.0 的macOS 10.13.4 在/usr/share/vim/vim80/ftplugin/gitcommit.vim 下工作得很好。

    CentOS 7.4 和 vim 7.4(git 版本 1.8.3.1)由于某种原因似乎没有使用其提供的 gitcommit.vim 中的 textwidth 行,所以我采取了一种快速而肮脏的解决方法(为了救我从处理多个文件)在 ~/.vimrc:

    nmap <F2> :set textwidth=72<CR>
    inoremap <F2> <Esc>:set textwidth=72<CR>a
    

    这似乎工作得很好,而且很容易记住——无论如何,我大多只是从那里拉出来,有点放弃再用旧版本的 git 和 vim 搞砸了。

    否则,我(暂时)在 Abe Voelker 的 answer 之后选择了 Chip Hogg 的 suggestion:autocmd FileType gitcommit setlocal textwidth=72

    我认为它在 git-commit 内部并没有太大的不同,但安全起来可能更好(特别是如果该行最终被复制到整个 vimrc 中)。文件类型当然设置为 on,就像在许多示例 vimrcs 中一样。

    * 然而,我仍然很好奇为什么vim的标尺没有显示,所以我查看了:help标尺,它通知+cmdline_info(在:version之后显示)需要在编译时设置时间。在 git-commit 之外的 vim 中运行 :ver 会显示不同的设置和不同的编译时间,这表明 git 可能正在调用 vim 的系统副本而不是用户副本。

    所以我应该在一开始就运行git config --global core.editor "vim",但我没有这样做,因为我认为这是一个多余的步骤。在每次安装 git 时先执行此操作可能会从一开始就省去很多麻烦!

    【讨论】:

      【解决方案5】:

      这是一个用于自动包装的 git 钩子,适用于任何编辑器: https://github.com/surabhigupta/AutoWrapSeventyTwo

      【讨论】:

        【解决方案6】:

        虽然其他答案很好地解决了这个问题,但我强烈建议您安装 Tim Pope 的 fugitive.vim

        fugitive.vim 是一个出色的插件,它为 Vim 带来了 Git 功能。它有许多与您的问题无关的功能,但值得一试。但是,它也可以帮助您记住保持提交消息的适当长度:

        【讨论】:

        • Git/vim 似乎在没有任何插件的情况下为我做语法高亮。
        • 我已经安装了这个,但它没有将提交消息包含在 72 个字符中
        【解决方案7】:

        将此添加到您的.vimrc

        filetype indent plugin on
        

        来自here

        【讨论】:

        • 这是唯一对我有用的东西,Vim 7.3 on os x 10.9
        • 唯一适用于我的 Vim 7.4、OSX Sierra 的东西
        猜你喜欢
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 2011-08-01
        • 2013-04-16
        • 2012-01-18
        • 2014-06-25
        • 2011-09-14
        • 2011-09-07
        相关资源
        最近更新 更多