在vi中快速缩进多行

2405

这应该很简单,甚至可能在帮助文档中提到,但我不知道如何在vi中快速缩进多行。请问应该怎么做?

34个回答

11

我喜欢为缩进做标记:

  1. 移动到文本行的开头,然后输入maa是“m”ark的标签:它可以是任何字母)
  2. 移动到文本行的结尾,然后输入mz(同样地,z可以是任何字母)
  3. :'a,'z>:'a,'z<将缩进或取消缩进(这是一个单词吗?)
  4. 大功告成!文本已移动(空行仍为空行,没有空格)

附注:您可以使用:'a,'z技术为任何操作(d、y、s///等)标记范围,在这些操作中您可能会使用行、数字或%


10

:help left

ex 模式 中,你可以使用 :left 或者 :le 命令来使一段代码左对齐。 具体来说,:left 命令会将指定范围内的行进行左对齐,并且设置这些行的缩进量为 [indent](默认值为0)。

:%le3:%le 3:%left3 或者 :%left 3 命令可以将整个文件的内容左对齐,并且通过添加三个空格进行填充。

:5,7 le 3 命令则会将第5到第7行的内容进行左对齐,并且通过添加三个空格进行填充。

:le 命令如果不带参数或者带参数 :le 0,则会将代码左对齐并且没有填充。

以上命令均适用于 Vim 和 gVim。


1
太棒了,正是我在寻找的(一种插入特定数量空格的方法——对于Markdown代码来说是4个空格——以覆盖我的普通缩进)。在我的情况下,我想在可视模式下缩进特定数量的行,所以使用shift-v突出显示这些行,然后使用:'<,'>le4插入空格。谢谢! - Subfuzion

9

我不知道为什么很难找到像这样简单的答案...

我自己也曾经费了很多力气才知道这个。其实很简单:

  • Edit your .vimrc file under the home directory.
  • Add this line

    set cindent
    

    in your file where you want to indent properly.

  • In normal/command mode type

    10==   (This will indent 10 lines from the current cursor location)
    gg=G   (Complete file will be properly indented)
    

9

5== 将从当前光标位置缩进五行。

因此,您可以在 == 前键入任何数字。它将缩进相应数量的行。这是在命令模式下进行的。

gg=G 将从顶部到底部缩进整个文件。


8

我经常使用Python,发现自己需要经常移动多个缩进块。你可以使用任何块选择方法,并在 > 前输入您想要跳转的缩进数目,来完成这个操作。

例如,V5j3> 会将五行向右缩进三次——如果您使用四个空格作为缩进,则相当于12个空格。


8

我使用块模式的可视选择:

  • 移动到块前(在顶部或底部)。
  • 按下Ctrl+V进入块状可视模式。
  • 导航以选择行前的列。
  • 按下I (Shift+I)进入插入模式。
  • 输入一些空格。
  • 按下Esc。所有行都会移动。

这不是一个单一的任务。它可以:

  • 在行的中间。
  • 在所有行上插入任何字符串。
  • 更改列(使用c而不是I)。
  • 复制、删除、替换等等...

这很麻烦,但如果您在核心VIM之外进行格式化(例如使用vim-prettier而不是默认的缩进引擎),那么这就是正确的方法。否则,使用>将会彻底破坏Prettier所做的格式化。 - oligofren
有趣的是,我覺得這一點都不繁瑣。這不是單一任務!學習這種方法除了縮排之外還有許多用途。 - sqqqrly
我认为这个答案比被接受的答案更好,因为我可以看到正在发生的事情,我选择的行以及我正在执行的操作,而不仅仅是输入某种vim咒语。 - user4052054

8
  • 对于一个代码块,使用{}: = + %

  • 对于选定的行: Shift + v 使用上下箭头键进行选择,然后按=

  • 对于整个文件: gg + = + G

注意:'gg' 表示跳转到第一行,'=' 是缩进命令,'G' 将光标移动到文件末尾


8

对于喜欢现代编辑器使用 Tab 键缩进选定行的人,以及使用 Shift+Tab 键将其减少缩进的人:

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

使用方法: 按下V进入行选择模式,选择需要操作的行,然后按下Tab(可能需要同时按下shift),缩进就会应用到你想要的位置,选择的内容也会保留...


非常好!即使在德语键盘上也完美地工作。请注意:在德语键盘上,Shift+. = :,这具有其他功能。因此,其他解决方案无法使用。 - Frederic Leitenberger
这个设置如何才能持久化?看起来每次关闭 vi(m) 后它都会重置。 - Frederic Leitenberger
@FredericLeitenberger 您可以将这些行添加到您的 vimrc 文件中。要获取更多信息,请执行此命令::h vimrc - Mamrezo
1
@FredericLeitenberger,此外,“Shift”+“.”的作用是在键盘上找到“>”字符... - Mamrezo

7
要在文件中缩进每一行,请键入Esc,然后键入G=gg

6

如何立即通过多个空格使vi中的代码缩进:

选项1:使用可视块模式在vi中将一段代码缩进三个空格:

  1. 选择要缩进的代码块。在正常模式下使用 Ctrl+V 并向下箭头选择文本来完成此操作。当其被选中时,输入 : 以给所选文本块发送命令。

  2. 在命令行中会出现以下内容::'<,'>

  3. 要将缩进设置为三个空格,请键入 le 3 并按下回车键。这是出现的内容::'<,'>le 3

  4. 所选的文本立即缩进三个空格。

选项2:使用可视行模式在vi中将一段代码缩进三个空格:

  1. Open your file in vi.
  2. Put your cursor over some code
  3. Be in normal mode and press the following keys:

    Vjjjj:le 3
    

    Interpretation of what you did:

    V means start selecting text.

    jjjj arrows down four lines, highlighting four lines.

    : tells vi you will enter an instruction for the highlighted text.

    le 3 means indent highlighted text three lines.

    The selected code is immediately increased or decreased to three spaces indentation.

选项三:使用可视块模式和特殊插入模式增加缩进:
  1. Open your file in vi.
  2. Put your cursor over some code
  3. Be in normal mode press the following keys:

    Ctrl+V

    jjjj
    

    (press the spacebar five times)

    Esc Shift+i

    All the highlighted text is indented an additional five spaces.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接