在 Vim 中自动包装长的 Git 提交消息
Posted
技术标签:
【中文标题】在 Vim 中自动包装长的 Git 提交消息【英文标题】:Automatically wrap long Git commit messages in Vim 【发布时间】:2012-06-16 21:38:17 【问题描述】:使用 Git,我的提交编辑器是 Vim。我在记住换行方面一直做得很差,所以我的行很长(例如,参见this answer)。有没有办法使用一些 git config
或 .vimrc
魔法让 Vim 自动换行 72 列?
Related question.
【问题讨论】:
您链接到的问题建议在您的.vimrc
中设置'textwidth'
选项。这不符合您的需求吗?
也许***.com/questions/5602905/auto-wrap-long-lines-in-vim 就是你要找的东西
@JoshLee -- 我的印象是全局设置最大宽度。我只想在 git-commit 消息中设置宽度。
@RemcoOverdijk -- 具有讽刺意味的是,这是我试图作为相关问题发布的链接。我不知道我是如何获得另一个链接的(实际上,当我关注它时,我记得第一次看到它)......无论如何,要清楚我 只想在 git commit 中强制换行 而且我不是 .vimrc 格式方面的专家(对我来说这一切都像是一门外语)。
【参考方案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 的东西以上是关于在 Vim 中自动包装长的 Git 提交消息的主要内容,如果未能解决你的问题,请参考以下文章