如何从vi中的光标位置开始插入一个空格块?

nye*_*e17 29 vi vim

假设我有下面的文本,光标停留在第一个A,

AAAA
BBB
CC
D
Run Code Online (Sandbox Code Playgroud)

如何在每条线的前面添加空格以使其成为可能,如果可以即时指定空格列数,那将是很好的,例如,这里有两个.

  AAAA
  BBB
  CC
  D
Run Code Online (Sandbox Code Playgroud)

我想有一种方法可以在视觉模式下快速完成,但任何想法?

目前我正在以可视模式复制第一列文本两次,并将整个两列替换为空格,这涉及> 5次击键,太麻烦了.

约束:

很抱歉,我没有明确说明问题,可能会产生一些混淆.

目标只是较大文件的一部分,因此如果A可以指定从第一个开始的行数和列数,则会很好.

编辑:

感谢@DeepYellow和@Johnsyweb,显然>}并且>ap都是我不知道的很好的提示,在我澄清我的问题的答案的具体要求之前它们都可以是有效的答案,但无论如何,@ luser droog答案是唯一可行的答案.谢谢大家!

lus*_*oog 47

我用了 :%s/^/ /

您还可以指定一系列行 :10,15s/^/ /

或相对范围 :.,+5s/^/ /

或者为位置使用正则表达式:/A/,/D/>.

为了复制代码粘贴在SO上,我通常使用来自终端的sed sed 's/^/ /' filename


捷径

我刚刚为此学到了一个新技巧.你进入视觉模式v,选择区域(使用常规移动命令),然后点击:它给你这个:

:'<,'>
Run Code Online (Sandbox Code Playgroud)

准备好只键入上述命令的命令部分,标记'<'>自动设置为视觉选择的边界.

要选择并缩进当前段落:

vip>
Run Code Online (Sandbox Code Playgroud)

要么

vip:>
Run Code Online (Sandbox Code Playgroud)

接着是enter.

编辑:

根据注释中的要求,您还可以使用任何元字符\{n}上的正则表达式,在行的中间添加空格..

:%s/^.\{14}/& /
Run Code Online (Sandbox Code Playgroud)

这会在每条线上从左侧增加14个字符.当然%可以用以上任何指定ex命令范围的选项代替.


Nig*_*igu 27

当在第一个A上时,我将进入块可视模式ctrl-v,选择要修改的行,按I(插入带有大写的模式i),然后对第一行应用我想要的任何更改.离开可视模式esc会将第一行的所有更改应用于所有行.

可能不是最有效的击键次数,但在离开视觉模式之前为您提供所需的所有自由.当我必须在regex命令中手动指定行和列范围时,我不喜欢它.

  • 哦! 这实际上是非常棒的伎俩!无论第一行的任何变化将最终应用于所选块的其余部分!感谢分享! (3认同)

Joh*_*web 14

我用了>}.

哪里...

  • >:向右移动
  • }:表示直到段落结束

希望这可以帮助.


小智 13

  1. Ctrl + v(进入可视模式)
  2. 使用箭头键选择线条
  3. Shift + i(带你进入插入模式)
  4. 点击空格键或您想要在所选行前面键入的任何内容.
  5. 保存更改(使用:w),现在您将看到所有选定行的更改.


rom*_*inl 6

我想要Nigu。另一种解决方案是使用:normal

  1. <S-v> 进入VISUAL-LINE模式
  2. 3jjjj/D<CR>选择行
  3. :norm I<Space><Space>'<,'>系统会自动插入正确的范围()

:normal 对于这种特定情况,这可能有点过大,但有时您可能想在一系列行上执行一堆复杂的操作。