82

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?

Related question.

Community
  • 1
  • 1
mgilson
  • 283,004
  • 58
  • 591
  • 667
  • 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 Answers7

109

Add this to your .vimrc:

au FileType gitcommit setlocal tw=72
Evan Carroll
  • 71,692
  • 44
  • 234
  • 400
Abe Voelker
  • 27,824
  • 14
  • 78
  • 97
  • 16
    That setting should already exist in `.../vim73/ftplugin/gitcommit.vim` unless you've set your own textwidth. – idbrii Aug 02 '12 at 00:49
  • 1
    This 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
  • 1
    To 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
    I had to say ``filetype plugin on`` in my .vimrc – Collin Anderson Sep 28 '16 at 19:29
  • This did not work for me. – Joe Previte Mar 16 '22 at 22:14
26

Add this to your .vimrc:

filetype indent plugin on

From here.

Alex
  • 1,171
  • 3
  • 14
  • 24
25

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:

Sample commit message within Vim on fugitive

David Cain
  • 15,340
  • 11
  • 64
  • 73
13

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
JBallin
  • 6,568
  • 1
  • 40
  • 45
3

In addition to other answers, use gqip to reformat a paragraph while editing.

See Vim Tips Wiki: Automatic formatting of paragraphs

cambunctious
  • 6,718
  • 4
  • 30
  • 44
1

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

sur
  • 41
  • 4
1

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!