Using Git, my editor for commits is Vim. I'm constantly doing a poor job of remembering to wrap lines and so I get long lines (see this answer for example). Is there a way using some git config
or .vimrc
magic that I can get Vim to automatically wrap lines at 72 columns?
-
The question you link to suggests setting the `'textwidth'` option in your `.vimrc`. Does that not meet your needs? – Josh Lee Jun 13 '12 at 21:01
-
Perhaps http://stackoverflow.com/questions/5602905/auto-wrap-long-lines-in-vim is what you're looking for – Rem.co Jun 13 '12 at 21:01
-
@JoshLee -- I was under the impression that would globally set the maximum width. I only want to set the width when in a git-commit message. – mgilson Jun 13 '12 at 21:12
-
@RemcoOverdijk -- Ironically enough, that was the link I tried to post as a related question. I don't know how I got the other link (actually, when I followed it was the first time I remember seeing it)... Anyway, to be clear I **only want to force wrapping when in a git commit** and I'm not an expert in .vimrc formatting (It all looks like a foreign language to me). – mgilson Jun 13 '12 at 21:16
7 Answers
Add this to your .vimrc
:
au FileType gitcommit setlocal tw=72

- 78,363
- 46
- 261
- 468

- 30,124
- 14
- 81
- 98
-
16That setting should already exist in `.../vim73/ftplugin/gitcommit.vim` unless you've set your own textwidth. – idbrii Aug 02 '12 at 00:49
-
1This only works if `formatoption` `t` is set. Use `:set fo?` to check an `:set fo+=t` to correct. – Henning Mar 19 '16 at 23:54
-
1To use this solution, you will need `:filetype on` in your .vimrc too. This enables vim to check filetypes and see you are editting a gitcommit file in this situation. @Henning is also correct you will need to have a fo with t included, to wrap on textwidth. However, as I understand it this is default—but still a point of failure. – Novice C Aug 28 '16 at 01:16
-
16
-
1
-
Can someone explain what the `au` is? I search for `vim au` or `vimrc au`, but I only get results relating to `autocommands`. Also, does `FileType` need to be capitalized? – joseville Jan 10 '23 at 03:43
-
1
-
-
This worked for me immediately on VI improved 8.2 on opensuse tumbleweed – Felipe Alvarez Feb 15 '22 at 07:44
-
1Just to explain this answer a little bit: `indent` and `plugin` relates to `filetype` setting, which is turned `on`. vim with `filetype on` detects filetype and can upload some specific settings to it (like indent configurations and plugins for that filetype). vim is shipped with such git helpers since some version. For more info execute `:help :filetype-overview`. PS. `syntax on` option may not be set by default (eg. to colorize message title with limit); adding it in `.vimrc` won't hurt. – amordo Nov 24 '22 at 09:48
While the other answers solve this problem perfectly well, I highly recommend you install Tim Pope's fugitive.vim.
fugitive.vim is an excellent plugin that brings Git functionality to Vim. It has a whole host of features that aren't relevant to your question, but are worth checking out. However, it can also help you remember to keep your commit messages the proper length:

- 16,484
- 14
- 65
- 75
-
5Git/vim appear to do the syntax highlighting without any plugin for me. – hertzsprung Mar 13 '15 at 11:28
-
1I have this installed but it doesn't wrap in 72 characters the commit message – Steven Aguilar Nov 13 '19 at 20:00
2018 Update - Update vim
If you update vim, it will automatically highlight the first 50 characters of your title and wrap lines at 72 characters. It knows that you're editing a git commit file.
Mac users can use Homebrew:
brew install vim
If you still aren't seeing the syntax highlighting, make sure you have it enabled:
You need to have following settings in .vimrc file as per arch linux documentation
filetype plugin on syntax on

- 8,481
- 4
- 46
- 51
-
I use vim v8.2 (macos) and it has no wrapping git message body lines feature. It only highlights the title and leaves the body text without anything. It's needed to explicitly use `filetype indent plugin on` (`syntax on` won't be redundant too) setting in `.vimrc`. – amordo Nov 24 '22 at 09:53
In addition to other answers, use gqip
to reformat a paragraph while editing.

- 8,391
- 5
- 34
- 53
Here's a git hook for auto-wrapping that will work with any editor: https://github.com/surabhigupta/AutoWrapSeventyTwo

- 51
- 4
Several of the options from the earlier posts work, except I noticed inconsistencies between different systems.
Fedora 28 (recently upgraded from F26) was easy once I realised :version inside git-commit/git-tag showed it was pointing to .virc files (weird*) so I simply copied my ~/.vimrc into ~/.virc [except, see below].
macOS 10.13.4 with vim 8.0 from brew works just fine off /usr/share/vim/vim80/ftplugin/gitcommit.vim according to :verbose :set tw=?.
CentOS 7.4 with vim 7.4 (git version 1.8.3.1) for some reason though didn't appear to be making use of the textwidth line in its supplied gitcommit.vim so I went for a quick and dirty workaround (to save me from dealing with multiple files) in ~/.vimrc:
nmap <F2> :set textwidth=72<CR>
inoremap <F2> <Esc>:set textwidth=72<CR>a
That seems to work well enough and is easy to remember - I mostly only pull from there anyway and have kind of given up messing around any more with the old versions of git and vim.
Otherwise, I (temporarily) went for Chip Hogg's suggestion after Abe Voelker's answer: autocmd FileType gitcommit setlocal textwidth=72
I don't think it makes much of a difference inside git-commit but it's possibly better to be safe (especially if that line ends up getting copied throughout a vimrc). Filetype is of course set to on, as it is in many example vimrcs.
* However, I was still curious as to why vim's ruler wasn't showing, so I looked at :help ruler which informs +cmdline_info (displayed after :version) needs to be set at compile time. Running :ver in vim outside of git-commit revealed different settings and a different compiled time, suggesting that git was perhaps calling the system copy of vim instead of the user one.
So what I should have done at the beginning to all this was run git config --global core.editor "vim" except I didn't because I had assumed it was a redundant step. Doing this first on every git installation might save a lot of hassle from the start!

- 51
- 3