Question

What's the easiest way to increase or decrease indentation for a large block of code in vi?

Was it helpful?

Solution

In vim (not sure if this applies to you too), you use >> to indent one line. As with nearly every command in vim, type in a number before the command to perform is multiple times. So to indent the next 50 lines, type 50>>.

OTHER TIPS

Autoidenting:

For a { } block I use the command: =iB (with the cursor inside the block to ident)

For re-identing a complete file, I use gg=G

Now for increase or decrease identation on a block, you have to select it (I use viB command) and then you do >> or << and if you want to repeat the identation just use the dot .

Also remember to set your identation settings with

:set shiftwidth=NUMOFSPACES

and

:set softtabstop=NUMOFSPACES

Mark it, then use > and <.

If your code is between curly braces, then put your cursor on one of the curly braces and use >% or <%.

Another useful command is, once you indent using '<' or '>', use '.' to repeat the command until it's lined up how you want it.

Also, you can look at http://vim.wikia.com/ for tips on this sort of thing.

By default in insert mode, you can use Ctrl-T and Ctrl-D to de-/intent the current line.

hit v to go into visual mode and arrow down so the whole block is selected then 12>>

use two angle-brackets ("<<" or ">>") for one line left or right by shiftwidth characters. You can do this with the common line-range indicators - ":m,n", brace/bracket/paren matching, etc.

Or "<", then a motion indicator, then another "<".

Or "<12<" shifts the next 12 lines left.

:50,100>

Will indent lines 50 through 100 once

:50,100>>

Will indent lines 50 through 100 twice

also works with < and << etc.

First find the line numbers of the start and end lines using the Control-g command. Let these be m and n. Suppose we wish to indent line numbers m through n by 5 spaces. Then, the following command does the job,

:m,ns/^/     /g 

To decrease the indentation, first convert all tabs to (say 4) spaces.

:m,ns/\t/    /g

Then let's say we wish to remove 3 spaces from lines numbered m through n.

:m,ns/^   //g
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top