如何在vim中的每几行之后添加一行

Ali*_*sha 21 vim

我想使用vim编辑器在文件中每隔3行添加一行(大约1000行).有人可以帮我吗?

谢谢,艾丽莎

jJ'*_*jJ' 34

有一个vim特定的正则表达式来做到这一点

  :%s/.*\n.*\n.*\n/\0\r/g
Run Code Online (Sandbox Code Playgroud)
  • %s是vim ex命令替换整个文件
  • .*\n是包含行尾的行
  • \ 0是整个匹配的表达式
  • \ r vim的方式来说添加一个新行(不是\n如人们期望的那样)

编辑:如果你想要一个新行,只需将文本放在\ r \n之前(正确的正则表达式转义,如果它包含一些正则表达式字符)

  • vim也有`\ {n \}`匹配模式的`n`出现.例如,我使用它在每100行插入单词'GO'(因为键入`.*\n`100次变得乏味):`%s/\(.*\n \)\ {100 \} /\0GO\R/g`.或者通过在正则表达式中启用非常神奇的模式(`\ v`),它变得有点简单:`%s /\v(.*\n){100} /\0GO\r /` (6认同)

Eug*_*ash 15

你可以使用.完整的过程如下:

qq     " start recording to register q (you could use any register from a to z)
o      " insert an empty line below cursor
<Esc>  " switch to normal mode
jjj    " move the cursor 3 lines downward
q      " stop recording
Run Code Online (Sandbox Code Playgroud)

然后只需移动到起始行并键入1000@q以执行宏1000次.

  • 最后的命令看起来像`qqo这是添加<ESC> jjjq`的行,可能是`333 @ q`(1000/3 = 333) (3认同)

Ser*_*ujo 7

" insert a blank line every 3 lines

:%s/\v(.*\n){3}/&\r          

: .............. command
% .............. whole file
s .............. replace
/ .............. start pattern that we will replace
\v ............. very magic mode, see :h very-magic
(.*\n) ......... everything including the line break
{3} ............ quantifier 
/ .............. start new pattern to replace
& .............. corresponds to the pattern sought in (.*\n)
\r ............. add line break
Run Code Online (Sandbox Code Playgroud)

来源:http://www.rayninfo.co.uk/vimtips.html


Ken*_*ent 6

我会这样做:

:%s/^/\=(line(".")%4==0?"\n":"")/g
Run Code Online (Sandbox Code Playgroud)

如果您的要求更改为“*每 700 行添加一个新的空行*s”,则此方法有效:) 您只需更改“4”

PS如果我需要这样做,我不会在vim中这样做。sed、awk 可以做得更简单。