In Vim, how can I shift a block of code to right?

In command mode, you can use >> to indent a single line. 4>> will indent the current and next three lines.

If you don't know how many lines in advance (it may be quite large), you can use ranges. Go to the first line of the range and enter ma to place marker A. Then go to the last line and enter >'a to indent from here to marker A. You can do all sorts of wonderful things with ranges.

How they're indented depends on a couple of things like your shiftwidth settings. I always have my shiftwidth and tabstop settings the same to avoid problems:

:set ts=4 sw=4

(for example).


If you've already selected the four lines in visual mode: > will shift them shiftwidth to the right. After they are shifted, the visual selection will be gone, but you can indent again via . (repeat last command).

If you are normal mode, with your cursor anywhere on the first line:

  • >> will indent that line,
  • 4>> will indent all four lines,
  • >3j will do the same thing in a different way (indent from this line to three lines down),
  • >} will indent all of the lines until the end of the paragraph (i.e. to the first empty line, see :help object-motions), and
  • >ap will indent all of the lines for a p-aragraph (see :help text-objects), even if your cursor isn't on the first line.

Again, you can repeat these commands via . for deeper indentation levels (or you can set shiftwidth appropriately).

If your file is nicely composed of "paragraphs" (and most of my code and prose is), I think you'll find the ap text-object to be the most common way to work on blocks of text like this. You can also use text-objects to speed up visual selection.

Tags:

Vim