开发者

How do I exclusively indent a code block in vim?

There are a surprising number of questions on this subject, yet som开发者_开发技巧e how none of them answer what I want.

I have a code block as follows:

void foo {

somecodehere
morecode
...

}

As you can see the guts of my function are indents on the same level as the rest of my code block. What I currently do is >% on the end of my block (ie the }) which indents the entire block, including the lines with my curly braces.

What I'd like to do is a similar command which indented every line in between excluding my curly braces.

I can not begin to tell you how much time this would save me.


Rather than mapping something new, >i{ seems to do what you want here, but it moves the cursor.


Put the cursor inside the block you want to indent, and type vi{>

v enters visual mode.

i{ selects everything inside the innermost {} block

> indents the visual block and goes back into normal mode

You can then use '' to move the cursor back to its original line.

N.B. if you want to indent the braces as well then replace i{ with a{.


insert

map sb v%><<%<<

into your .vimrc (replace 'sb' with any key combination you want). it shifts the whole function to the right and then the first and the last line back to the left. It works in the first or on the last line of a block


I use marks which can be a pain sometimes but it works.
Go to the last line of your function (the line above the })
ma Create mark 'a'
Go back to the top of the function and do this.

>`a

That just says indent by one level until it reaches mark a.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜