24

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

谢谢,艾丽莎

4

4 回答 4

41

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

  :%s/.*\n.*\n.*\n/\0\r/g
  • %s 是 vim ex 命令替换整个文件
  • .*\n 是包含行尾的行
  • \0 是整个匹配的表达式
  • \r vim 表示添加新行的方式(不是 \n 预期的那样)

编辑:如果您想要换行以外的任何其他内容,只需将文本放在 \r 前面(正确的正则表达式转义,如果它包含一些正则表达式字符)

于 2012-05-02T12:46:01.163 回答
20

您可以使用。完整的过程如下所示:

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

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

于 2012-05-02T13:28:28.180 回答
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

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

于 2012-05-10T22:23:48.100 回答
4

我会这样做:

:%s/^/\=(line(".")%4==0?"\n":"")/g

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

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

于 2012-05-02T13:26:08.370 回答