Ensuring aligned indentation


If you are writing code in Vim and you care about your code’s alignment, Vim has a setting you probably want to be using called shiftround. With :set shiftround enabled, Vim will round the indents to a multiple of shiftwidth when using the > and < commands:

  • set shiftround – Rounds the indent spacing to the next multiple of shiftwidth

You may already know about > and < to indent and outdent the current line, or multiple lines:

  • > – Indent current line or selected lines
  • < – Outdent current line or selected lines

The number of spaces indented by this operation is determined by the shiftwidth setting. This setting is also honored by == and =, which we have written about in the past. For example, I write mostly Ruby and the Ruby community generally prefers 2 spaces, so that’s what I use:

  • set shiftwidth=2 – Auto indent to two spaces

Now, back to shiftround. How is it useful? Let’s say I erroneously indented something 3 characters. Perhaps I pasted from somewhere else and didn’t line things up properly. Well, without shiftround enabled, using the > command to indent, will simply add 2 to the existing 3, leaving my indent still off by one character. With shiftround enabled, indenting with > will true things up again by indenting just one character.

Take a look at the demo below. In it, I have two sets of lines, each of which suffer from an off-by-one indentation issue. For the first one, I do not have shiftround enabled, and when I indent, it’s still off by one. For the second one, I first enable shiftround. Then, when I indent with >, the indent trues it up to the expected location: indented 6 spaces.

How useful was this tip?

Average rating 4.6 / 5. Vote count: 90

No votes so far! Be the first to rate this tip.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Written by

Colin Bartlett

105 Posts

Vim enthusiast and software developer for more than 20 years.
View all posts