Vim/gvim will wrap long lines like this:

000000000000000000000000000000000000|
00000000000000                      |
    11111111111111111111111111111111|
111111111111111111                  |
    22222222222222222222222222222222|
222222222222222222                  |
        3333333333333333333333333333|
3333333333333333333333              |

Is there a way to get Vim to wrap those lines like this instead:

000000000000000000000000000000000000|
 00000000000000                     |
    11111111111111111111111111111111|
     111111111111111111             |
    22222222222222222222222222222222|
     222222222222222222             |
        3333333333333333333333333333|
         3333333333333333333333     |

I want the wrapped line to start a little past the indent of where that line started. (Just to be clear, I'm talking about wrap, not textwidth.)

I want the indentation of the line to be considered in the wrapping of that line so that the code structure isn't hidden by wrapped lines.

up vote 17 down vote accepted

UPDATE: This functionality landed in vim 7.4.338, though you'll want 7.4.354 or later.


So apparently this requires a patch to Vim. There is a patch by Vaclav Smilauer from back in 2007. I updated the patch to work with Vim 7.2.148 from Fedora 11. But it does seem to do the job.

  • 1
    As Fedora releases updates to Vim, I'm updating the patch. See retracile.net/wiki/VimBreakIndent for the latest. – retracile Nov 23 '10 at 4:16
  • Bonus points to someone who can explain how to get this to work with MacVim. – donut Mar 29 '11 at 20:01
  • Where is the patch? That site doesn't link to any I can see – puk Feb 23 '12 at 11:57
  • @puk: Sorry, a major software upgrade had changed some link locations. I've fixed those now. – retracile Feb 24 '12 at 17:17
  • 1
    As of today (June 25, 2014) the breakindent patch is officially part of Vim 7.4 -- it is added by patch 338 and 345. – Heptite Jun 25 '14 at 21:21

In your .vimrc:

set wrap               " soft-wrap lines

" requires +linebreak compile-time option (not in the 'tiny' and 'small' builds); check your :version
set showbreak=----->   " prefix for soft-wrapped lines (no actual line break character)
"set linebreak          " soft-wrap lines only at certain characters (see :help breakat)

" If you like line numbers, you may want this instead:
"set number
"set showbreak=------>\  " line up soft-wrap prefix with the line numbers
"set cpoptions+=n        " start soft-wrap lines (and any prefix) in the line-number area

Or just type :set showbreak=-----> in any session.

For reference, my research trail (Vim 6.2): :help 'wrap' -> :help 'linebreak' -> ( :help 'showbreak' -> :help 'cpoptions', :help 'breakat')

  • Very cool, but not really what I meant. You took it a bit more literally than I intended, so my fault there. I'll see if I can clarify. – retracile Nov 20 '09 at 15:03

The solution to your question can be achieved setting two parameters in your vimrc:

To break the lines with the same indentation: set breakindent

And one space for indenting soft-wrapped lines: let &showbreak=' '

It will work this way:

111111111111111|
 11111111111111|
 11111         |
222222222222222|
 222222222222  |
333333333333333|
 33333         |

Not the perfect answer you're looking for, but here's what I do to get around vim's lack of proper indentation.

First, download Nathanael Kane's indent guide (optional) as it better indicates what indentation level you are at, even to the point where you can set tabwidths to be only 2 spaces!

Second, map a key combination to toggle word wrap. I have mine set to 'r' for 'wrap' ('w' is for saving) like so

:noremap <leader>r :set nowrap! <CR>

Then I always have word wrap off, since it is more aesthetically pleasing, and I quickly toggle it on if I need to edit the line.

The foul "workaround" I currently use, is to have a fixed but big indentation in the prefix. It looks good, as long as this fixed indentation is bigger than the wrapped line's indentation, which is the case most of the time.

" 'showbreak'   : string to put before wrapped screen lines
set sbr=\ \ \ \ \ \ \ \ \ \ \ \ \ \|\ 

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.