Vim,如何在每一行下面 添加一个或多个空白行。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim,如何在每一行下面 添加一个或多个空白行。相关的知识,希望对你有一定的参考价值。

我在做一个表 , 需要在每一行下面 插入空白行。 有那个大神知道吗?

windclsoe 给出的替换是一种思路。

一般来说如果要在一行下面添加一行,容易想到的是用 o 这个命令。如果想添加三行的话,是 3o。
如果 3o 后立即退出插入模式的话,就可以添加三个空白行。如果输入一些文字再退出,可以添加三个相同文字的行。试一下就知道了。

如果想在每一行执行相同的命令,在 vim 里可以用 :g 实现。一般的语法是 :g/pattern/cmd
它表示在匹配 /pattern/ 这个正则表达式的行上执行 cmd 命令(指 ex 模式的命令,也称冒号命令)。而 /^/ 这个表达式,用于匹配行首。因为任何一行都有行首,你的要求就很容易实现了:
:g/^/norm 3o
norm 这个命令的意思是,把后面的参数看成是在普通模式下的按键。
参考技术A %s/\n/\r\r/
会在每行下添加一个空白行,拿分不谢^_^本回答被提问者采纳

如何在 Vim 的每一行末尾添加一个字符串?

【中文标题】如何在 Vim 的每一行末尾添加一个字符串?【英文标题】:How can I add a string to the end of each line in Vim? 【发布时间】:2010-10-10 07:34:53 【问题描述】:

我想在 Vim 的每一行末尾添加*

我试了代码不成功

:%s/\n/*\n/g

【问题讨论】:

你的不起作用,因为在:s/// 的右侧,\n 对应于一个空字符。 :help sub-replace-special 部分是相关的。 【参考方案1】:
:%s/$/\*/g

应该有效,:%s/$/*/g 也应该有效。

【讨论】:

有没有办法在同一列插入'',因为所有行的长度不同,所以第1行可能在第15列有'',但是行2 在第 25 列有“*”。 每行只有1个EOL,所以g标志是不必要的。 我想在每行的开头添加 / :1,$s/^/\/g 为我工作。【参考方案2】:

我认为使用视觉块模式是处理这类事情的更好、更通用的方法。这是一个例子:

This is the First line.  
This is the second.  
The third.

插入“Hello world”。 (空格 + 剪贴板) 在每一行的末尾:

在第一行的字符上,按 Ctrl-V(如果是 Ctrl-V,则按 Ctrl-Q 是粘贴)。 按 jj 将可视块扩展到三行。 按 $ 将可视块扩展到每行的末尾。按 A 然后空格然后输入Hello world。 + 然后 Esc。

结果是:

This is the First line. Hello world.  
This is the second. Hello world.  
The third. Hello world.  

(来自Vim.Wikia.com的示例)

【讨论】:

可以点击G 移动到最后一行,而不是按jj。这在大文件中很有用,在这种情况下按j 直到你打到最后一行是不切实际的。 同意视觉块在这里最干净,也更可扩展 请注意,这似乎并不适用于所有行,但在您按 Esc 后,它会通过并将其添加到所有行。 Visual Block 在使用 vim 作为其他东西的扩展时会导致问题和错误,比如 VS Code。在这些情况下,搜索和替换原始用户的要求是可靠的选择。 确保使用大写 A,小写“a”不起作用。【参考方案3】:

一个选项是:

:g/$/s//*

这将找到每个行尾锚点并将其替换为*。我说的是“替代”,但实际上,它更像是一个附加,因为锚是一个特殊的东西,而不是一个常规字符。如需更多信息,请参阅Power of g - Examples。

【讨论】:

正则表达式中的 s// 是什么意思?我知道一个类似的命令,:g/ / /p,(grep)。我很确定你的命令和我的很接近,至少在结构上是这样。 s 是替代 - 它用星号替换行尾锚(好吧,实际上并没有替换它,因为它是一个锚点)。【参考方案4】:

如果你想在每一行的末尾添加 Hello world:

:%s/$/HelloWorld/

如果您想针对特定的行数执行此操作,例如从 20 到 30,请使用:

:20,30s/$/HelloWorld/

如果您想在每一行的开头执行此操作,请使用:

:20,30s/^/HelloWorld/

【讨论】:

【参考方案5】:

最后你真的不需要g。于是就变成了:

:%s/$/*

或者,如果您只想在末尾添加 *,例如第 14-18 行:

:14,18s/$/*

:14,18norm A*

【讨论】:

【参考方案6】:
%s/\s*$/\*/g

这样可以解决问题,并确保忽略前导空格。

【讨论】:

【参考方案7】:

...并在每一行前面加上 *,

%s/^/*/g

【讨论】:

这没有回答问题。【参考方案8】:

比 :search 命令还要短:

:%norm A*

这就是它的意思:

 %       = for every line
 norm    = type the following commands
 A*      = append '*' to the end of current line

【讨论】:

伙计,没有 vi 或 vim 线程可以让我学到一些东西。今天我学习了规范。正如他们在 Cheers 上所说的那样,“Norm!” 对于前置,您只需使用 0i*,0 将您带到行首,i 表示插入模式,* 表示 *。 D: 作为VimGolfer,我不得不补充一点,使用I* 而不是0i* 可以为您节省一次按键操作。 另一个提示: 这也适用于范围。只需在可视模式下突出显示行并按:,这将使用:'<,'> 预先填充命令,然后您可以将其转换为:'<,'>norm A* 对于前置,请改用I - :%norm I*【参考方案9】:

还有:

:g/$/norm A*

还有:

gg<Ctrl-v>G$A*<Esc>

【讨论】:

啊……第二个也可以与选择的线条一起使用。不错! 你能解释一下第一个例子吗? @CodyPoll gglobal 命令,它对每个匹配的行执行一些操作。 $ 匹配每一行。也可以是^.*。 norm 执行您通常在命令模式下使用的命令。所以A* 表示将* 附加到行尾。【参考方案10】:
:%s/\n/*\r/g

您的第一个在其他任何地方都是正确的,但由于某种原因,Vim 必须有不同的换行符处理。

【讨论】:

在我的 Vim 版本中 \n 工作,但这只是用 * 替换换行符,有效地加入行。 这个命令已经过验证,可以在我尝试过的每个 Vim 版本上正常工作。你用的是windows版本还是什么的?

以上是关于Vim,如何在每一行下面 添加一个或多个空白行。的主要内容,如果未能解决你的问题,请参考以下文章

excel怎么隔1行插入5行空白行啊?

【ASP.NET 求助】自动添加一行空白行供添加数据或总有一行空白行

word怎么自动删除空字符行?

查找第一行中的第一空白列

添加一行的 Google 表格脚本

Java如何判断excel表格为空