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


当前回答

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

:2,10norm 10i 

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

:%norm 5i_

或者更花哨的东西:

:%norm 2i[ ]

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

:1,20norm i#

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

:%norm 5x

其他回答

假设|表示光标在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版开始提供)。

使用>命令。要缩进五行,请5>>。要标记一个行块并缩进它,Vjj>缩进三行(仅限Vim)。要缩进大括号块,请将光标放在其中一个大括号上,然后使用>%或从块内的任何位置使用>iB。

如果要复制周围的文本块,并且需要在新位置对齐块的缩进,请使用]p而不是p。这会将粘贴的块与周围的文本对齐。

此外,shiftwidth设置允许您控制缩进多少空格。

当您选择一个块并使用>缩进时,它将缩进,然后返回正常模式。我的.vimrc文件中有这个:

vnoremap < <gv

vnoremap > >gv

它使您可以根据需要多次缩进所选内容。

对于喜欢使用<TAB>->TAB和<S-TAB>->Shift+TAB缩进选定行的现代编辑器:

vnoremap <TAB> >gv
vnoremap <S-TAB> <gv

用法:按V键进入逐行视觉模式,选择所需的行,然后按Tab键(可能有移位),然后按需应用缩进,选择仍保留。。。

经常使用Python,我发现自己经常需要将块移动不止一次缩进。您可以通过使用任何块选择方法来执行此操作,然后只需在>之前输入要跳转的缩进数量

例如,V5j3>将缩进五行三次-如果使用四个空格进行缩进,则为12个空格。