【发布时间】:2024-01-17 23:56:01
【问题描述】:
我想使用 vim 编辑器在文件(大约 1000 行)的每 3 行之后添加一行。有人可以帮帮我吗?
谢谢, 艾丽莎
【问题讨论】:
标签: vim
我想使用 vim 编辑器在文件(大约 1000 行)的每 3 行之后添加一行。有人可以帮帮我吗?
谢谢, 艾丽莎
【问题讨论】:
标签: vim
有一个特定于 vim 的正则表达式可以做到这一点
:%s/.*\n.*\n.*\n/\0\r/g
编辑:如果您想要换行以外的任何内容,只需将文本放在 \r 前面(如果它包含一些正则表达式字符,则正确转义正则表达式)
【讨论】:
\{n\} 匹配 n 出现的模式。例如,我用它在每 100 行插入单词“GO”(因为输入 .*\n 100 次会很乏味):%s/\(.*\n\)\{100\}/\0GO\r/g。或者通过在正则表达式中启用非常神奇的模式(\v),它变得更容易阅读:%s/\v(.*\n){100}/\0GO\r/
您可以使用macro。完整的流程如下:
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 次。
【讨论】:
qqoThis is the line to add<ESC>jjjq 并且可能是333@q (1000 / 3 = 333)
qqqqqoThis is the line to add<ESC>jjj@qq 和 @q。我在开头加了3个q先清理寄存器q。
" 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
【讨论】:
我会这样做:
:%s/^/\=(line(".")%4==0?"\n":"")/g
如果您的要求更改为“*每 700 行添加一个新的空白行*s”,则此方法有效:) 您只需更改“4”
附:如果我需要这样做,我不会在 vim 中这样做。 sed、awk 可以更简单。
【讨论】:
^ 表示行首。我们将当前行数的 Mod 乘以 4,如果它为真(等于 0),它将新行作为替代,否则它不使用任何“”。