Yongwei Xing
Yongwei Xing

Reputation: 13451

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

I am using the Vim editor. Here is my situation:

1111111111111
2222222222222
3333333333333
4444444444444

Above is the original code, I want to make them like below. What should I do to shift them all to the right?

    1111111111111
    2222222222222
    3333333333333
    4444444444444

Upvotes: 44

Views: 58308

Answers (9)

Zaur
Zaur

Reputation: 431

  1. Ctl+v # for the Visual Block mode
  2. Move with arrows up or down to select the block
  3. Once block is selected you can do >
  4. OR while block is selected click on 'I'. Cursor will move to the first selected line in Insert mode.
  5. Start moving it by adding spaces. Dont worry that only first line moves.
  6. Once first line is aligned as you expected hit Esc and then arrow down

Upvotes: 1

Svistun
Svistun

Reputation: 1

Not mentioned here but very useful:

The :> and :< commands take a range, and additional > or < can be used. For example, :12,20>>> indents lines 12 to 20 inclusive three times

Source https://vim.fandom.com/wiki/Shifting_blocks_visually

Upvotes: 0

Afshin
Afshin

Reputation: 41

  1. Press Ctlt+v to select multiple lines.
  2. Type :
  3. Type sed substitute pattern matching s/^/ /g (e.g: for adding 4 spaces)
  4. Press enter

vim indent multiple lines

Vim follows sed to remove/add extra spaces from the start of lines like this:

sed -i 's/^/    /g'  test.txt
sed -i 's/^    //g'  test.txt

Upvotes: 1

trad
trad

Reputation: 1

For me the number need to be after, like >>4, to move to right, or before, like 4<<, to move to left. I use Vim 7.4.52.

Upvotes: -1

paxdiablo
paxdiablo

Reputation: 882806

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).

Upvotes: 63

nicholas a. evans
nicholas a. evans

Reputation: 2233

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.

Upvotes: 33

Rumple Stiltskin
Rumple Stiltskin

Reputation: 10435

Use v to select the block and then press > key.

Upvotes: 7

Michael Ulm
Michael Ulm

Reputation: 802

Use the > key.

Upvotes: 3

Alok Singhal
Alok Singhal

Reputation: 96251

Hit >

That's all.

Upvotes: 13

Related Questions