例如下面一段代码:
2013-01-10更新:上面的方法太麻烦了,gg>G即可。如果只缩进第2~6行:2G>6G
下面的代码vim有更智能的缩进方法:
public static int rank(int key, int[] a) { int lo = 0; int hi = a.length - 1; while (lo <= hi) { // Key is in a[lo..hi] or not present. int mid = lo + (hi - lo) / 2; if (key < a[mid]) hi = mid - 1; else if (key > a[mid]) lo = mid + 1; else return mid; } return -1; }
假设光标在while循环内的某处,用>aB就可以缩进,<aB反缩进,其中a表示包括分隔符(这里是{和}),B表示block,即代码块(参考http://www.viemu.com/a-why-vi-vim.html)。
上面的方法移动整个代码块,如果只想把嵌套部分向内缩进,将光标放在块内的任意行首,然后用>iB,重复这个缩进动作用“.”命令。
2013-10-28更新:
上面的方法是手工缩进,但vim支持大部分编程语言的自动缩进(用"="键),即根据打开文件的扩展名决定缩进方法,上面的缩进一条指令搞定:ggvG=
与手工缩进相比,自动缩进受文件扩展名的限制,例如无法在xml文件的buffer里修改C代码的缩进;