它应该很小,甚至可能在帮助中,但我不知道如何导航它。如何在vi中快速缩进多行?


当前回答

可以使用norm i命令在行的开头插入给定的文本。要在第2-10行前插入10个空格:

:2,10norm 10i 

请记住,命令末尾必须有一个空格字符——这将是我们想要插入的字符。我们还可以用任何其他文本缩进一行,例如用五个下划线字符缩进文件中的每一行:

:%norm 5i_

或者更花哨的东西:

:%norm 2i[ ]

更实际的例子是用#字符注释Bash/Python/etc代码:

:1,20norm i#

要重新缩进,请使用x而不是i。例如,要从每行中删除前5个字符:

:%norm 5x

其他回答

更多视觉人的按键:

进入命令模式:逃跑移动到要缩进的区域的开头:hjkl公司↑↓←→启动块:v移动到要缩进的区域末端:hjkl公司↑↓←→(可选)键入所需的缩进级别数0..9在块上执行缩进:>

我使用块模式视觉选择:

到块的前面移动(在顶部或底部)。按Ctrl+V进入视觉块模式。导航以选择行前面的列。按I(Shift+I)进入插入模式。键入一些空格。按Esc键。所有线路都会移位。

这不是一蹴而就。它起作用:

在队伍中间。在所有行上插入任何字符串。要更改列(使用c而不是I)。拖动、删除、替换等。。。

假设您使用2个空格缩进代码。类型:

:set shiftwidth=2

键入v(进入视觉块编辑模式)使用箭头键(或使用h/j/k/l)移动光标以高亮显示要缩进或不缩进的行。

然后:

键入>以缩进一次(2个空格)。键入2>以缩进两次(4个空格)。键入3>以缩进三次(6个空格)。...键入<以取消缩进一次(2个空格)。类型2<取消缩进两次(4个空格)。类型3<至无凹痕三次(6个空格)。...

你明白了。

(空行不会缩进,我觉得这有点不错。)


我在(g)vim文档中找到了缩进块的答案:

:help visual-block
/indent

如果要给命令计数,请在键入之前执行此操作运算符字符:“v{movearound}3>”(将第3行缩进到右侧)。

转到文本开头

按v进入视觉模式。使用向上/向下箭头突出显示文本。按=缩进高亮显示的所有行。

假设|表示光标在Vim中的位置。如果要缩进的文本包含在代码块中,如:

int main() {
line1
line2|
line3
}

您可以执行>i{,这意味着“在(i)块({)内缩进(>)”并获得:

int main() {
    line1
    line2|
    line3
}

现在假设这些线是连续的,但在块之外,例如:

do
line2|
line3
line4
done

要缩进第2行到第4行,您可以直观地选择行并键入>。或者更快,您可以做>2j以获得:

do
    line2|
    line3
    line4
done

注意,>Nj表示从当前行缩进到下面的N行。如果要缩进的行数很大,用户可能需要几秒钟才能计算出正确的N值。为了节省宝贵的时间,您可以使用设置的relativenumber激活相对数选项(从Vim 7.3版开始提供)。