无法在Vim中将空格替换为新行

99

我了解线程

我运行

:%s/ /s/\n/g

I get

E488: Trailing characters

第二个例子

我奔跑

:%s/ /\n/g

我理解

text^@text

我也使用以下设置独立运行相同的代码

set fileformat=unix
and
set fileformat=dos

Vim如何使用新行替换文本?

5个回答

190

:%s/ /Ctrl vReturn/g

其中,Ctrl v是Control键加上v键,Return是回车键(主键盘上的那个回车键,而不是数字小键盘上的enter键)。其他字符按照平常输入即可。

如果正确输入,序列Ctrl vReturn将显示为^M字符,通常以不同颜色显示以表示它们是特殊字符。请注意,实际键入^M不能起作用。

此外,请注意,在Windows中的Vim中,应该使用Control-q而不是Control-v(因为Control-v是粘贴)。


Ctrl-v还允许通过键盘输入其他“特殊”键,例如Tab或Backspace等,也很有用。


1
说实话,一开始这个关键序列没有任何意义。但是在花了一点时间欣赏之后,它现在变得非常清晰;粘贴一个返回代码。感谢@sleske的分享。 - Matthew Setter
这个不起作用。Ctrl+V会粘贴剪贴板中的任何内容...所以你首先必须将一个换行符复制到剪贴板中,然后才能运行:%s/ /<Ctrl+v>/g,无需按回车键。 - GACy20
@GACy20:对我来说它是有效的(在Linux上的vim和Windows上的gVim上测试过)。正如我在我的答案中所写的,有些版本的vim可能使用Ctrl-Q而不是Ctrl-V。你使用的是哪个vim版本/可执行文件? - sleske
@sleske Windows 终端 + WSL,所有设置均为默认。对于此情况,无论是 Ctrl+V 还是 Ctrl+Q 都没有任何有用的作用。如果我复制一个换行符(例如从 notepad++ 中),那么使用 Ctrl+V 将插入一个回车代码(在这种情况下不需要后续的“Return”)。 - GACy20
@GACy20:嗯,也许是Windows终端干扰的问题?似乎它可以进行配置:https://github.com/microsoft/terminal/issues/5641。作为参考:我使用cmd.exe + WSL + vim,这对我有用。 - sleske
显示剩余5条评论

70

请尝试

%s/ /\r/g

8

请按照以下步骤操作:

:s/ /

现在按下Ctrl-V或Ctrl-Q(取决于您的配置)并按Enter键。您现在应该有:

:s/ /^M

完成它:
:s/ /^M/g

然后你就可以开始了。


3
具体来回答您关于尾随字符的问题,这是您指定的正则表达式:
:%s/ /s/\n/g

你有太多的/。会发生的情况是你用s替换了空格,然后在替换后加上了这个标记:\n/g 我认为你的意思是:
:%s/ \s/\n/g

请注意,您的/s已更改为\s。现在,替换将用\n替换任何一种空格或制表符后跟一个空格。我怀疑这是否解决了将空格替换为换行符的问题,但它应该可以解释错误消息。

1

尝试以下方法之一

对于Unix系统:

:1,$s/\ /\n/g

For Windows:

:1,$s/\ /\r/g

这个包含了一个空格的转义字符。


有趣。我得试一试。 - samoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接