无法在Vim中用换行替换空格


70

我知道线程

我跑

:%s/ /s/\n/g

我懂了

E488: Trailing characters

第二个例子

我跑

:%s/ /\n/g

我懂了

text^@text

我也分别使用以下设置运行相同的代码

set fileformat=unix

set fileformat=dos

如何在Vim中用新行替换?

Answers:


140

:%s/ /Ctrl vReturn/g

其中Ctrl vControl键为加键v,Return为返回键(主键盘上的一个,而不是数字键盘上的Enter键)。其他字符照常键入。

如果输入正确,该序列Ctrl vReturn将显示为字符^M,通常以不同的颜色表示它们是特殊的。请注意,其实打字^M不会工作。

还要注意,在Windows的Vim中,它是Control-q而不是Control-v(因为它是粘贴的)。


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


我接受答案,因为它是大多数系统独立的。samoz的答案也可以。令人惊讶的是,Windows命令可以在我的OS / X中运行,而不是Unix命令。
莱奥波德·赫兹(LéoLéopoldHertz)2009年

@rangalo::%s / / \ r / g对我也很好,但是:%s / / \ n / g也不行。
莱奥波德·赫兹(LéoLéopoldHertz),2009年

@theonlygusti:您阅读了说明吗?<CTRL-V>是Control键加键v。如果将其复制并粘贴,将无法使用。
sleske

我编辑了答案,以明确要按的键。
sleske '17

1
老实说,键序列起初没有任何意义。但是花了一点时间来欣赏它之后,它现在变得很有意义了。粘贴返回码。感谢您分享@sleske。
马特塞特


8

输入以下内容:

:s/ /

然后键入Ctrl-V或Ctrl-Q(取决于您的配置),然后按Enter键。您现在应该拥有:

:s/ /^M

完成它:

:s/ /^M/g

而且你很好。


2

特别是为了解决尾随字符的问题,这是您指定的正则表达式:

:%s/ /s/\n/g

你太多了/。发生的情况是,您将替换为' s,然后在替换后对此进行标记:\n/g

我认为您的意思是:

:%s/ \s/\n/g

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


1

尝试之一

对于Unix:

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

对于Windows:

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

它包含空格的转义字符。


有趣。我得试试看。
samoz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.