在Vim中,我如何将一段代码块向右移动?

41

我正在使用Vim编辑器。这是我的情况:

1111111111111
2222222222222
3333333333333
4444444444444

以上是原始代码,我想把它们变成下面这样。我应该怎么做才能将它们全部向右移?

    1111111111111
    2222222222222
    3333333333333
    4444444444444
9个回答

57

在命令模式下,可以使用>>缩进单行。 4>>将缩进当前和下三行。

如果您不知道有多少行(可能非常大),则可以使用范围。 转到范围的第一行并输入ma以放置标记A。 然后转到最后一行并输入>'a以从此处缩进到标记A。 您可以通过范围执行各种奇妙的操作。

它们的缩进方式取决于一些参数,例如您的shiftwidth设置。 我总是将我的shiftwidth和tabstop设置为相同的,以避免问题:

:set ts=4 sw=4

(例如)。


7
吹毛求疵:您在普通模式下使用>>;命令模式是当您键入冒号:并输入命令时。 - too much php
3
实际上,我对此持有异议。Vi一直使用“命令模式”和“插入模式”,尽管维基百科有误 :-)。冒号命令只是通过在命令模式下以冒号作为前缀来允许使用的“ex”命令。 - paxdiablo
Vim确实区分正常模式和命令模式,记住它们的不同之处很重要,例如映射等。为避免混淆,vim帮助始终会提到“正常模式”。但是,:help command-mode会告诉你有关正常模式的信息,“这也被称为命令模式”。 - nicholas a. evans

30
如果您已经在可视模式下选择了这四行:>将把它们向右移动shiftwidth。移动完成后,可视选择将消失,但您可以通过.(重复上一条命令)再次缩进。
如果处于正常模式,并且光标位于第一行的任何位置:
  • >>将缩进该行,
  • 4>>将缩进所有四行,
  • >3j以不同的方式执行相同的操作(从此处缩进到三行以下),
  • >}将缩进所有行直到段落结束(即到第一个空行处,请参见:help object-motions),并且
  • >ap将缩进a段落中的所有行p(请参见:help text-objects),即使光标不在第一行也是如此。
同样,您可以通过.来重复这些命令以进行深层缩进级别(或者您可以适当设置shiftwidth)。
如果您的文件由“段落”组成(大多数代码和散文都是如此),我认为您会发现ap文本对象是处理此类文本块的最常见方式。您还可以使用text-objects来加快可视选择速度。

11

点击 >

就是这样。


6

使用v选择块,然后按>键。


3
使用“>”键。

1
  1. 按下 Ctlt+v 来选择多行。
  2. 输入 :
  3. 键入sed替换模式匹配 s/^/ /g(例如:添加4个空格)
  4. 按回车键

vim indent multiple lines

Vim 遵循 sed 的方式来删除/添加行首的额外空格,就像这样:

sed -i 's/^/    /g'  test.txt
sed -i 's/^    //g'  test.txt

1
  1. Ctl+v # 用于可视化块模式
  2. 使用上下箭头移动以选择块
  3. 一旦选择了块,可以执行 >
  4. 或者在选择块时点击'I'。光标将会进入第一个选定行的插入模式。
  5. 通过添加空格来移动它。不要担心只有第一行移动了。
  6. 当第一行按照您的预期对齐后,请按Esc,然后向下箭头

0

-1

对我来说,数字需要在符号后面,如>>4,向右移动,或者在符号前面,如4<<,向左移动。我使用的是Vim 7.4.52。


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