我试图用新行替换当前文件中的每一行:

:%s/,/\n/g 

但它插入了一个类似于^@的内容,而不是实际的换行符。该文件未处于DOS模式或任何状态。

我该怎么办?

如果您像我一样好奇,请检查问题:为什么\r是Vim的新线?也


当前回答

在vim编辑器中,以下命令成功替换为新行

:%s/\\n/\r/g

其他回答

在Eclipse中,^M字符可以嵌入到一行中,您需要将它们转换为换行符。

:s/\r/\r/g

这是对我有用的答案

----引用使用vi编辑器在替换中插入换行符


还有一些事情我必须做,但我记不住了,然后不得不抬头看。

在vi中,要在搜索和替换中插入换行符,请执行以下操作:

:%s/look_for/replace_with^M/g

上面的命令会将“look_for”的所有实例替换为“replace_with\n”(\n表示换行)。

要获得“^M”,请输入组合键Ctrl+V,然后(释放所有键)按enter键。


在vim编辑器中,以下命令成功替换为新行

:%s/\\n/\r/g

在语法s/foo/bar中,\r\n和\n有不同的含义,具体取决于上下文。


短:

对于foo:

\r==“回车”(CR/^M)\n==在Linux/Mac上匹配“换行符”(LF),在Windows上匹配CRLF

对于棒材:

\r==在Linux/Mac上生成LF,在Windows上生成CRLF\n==“空字节”(NUL/^@)

当在linux中编辑最初在windows环境中创建并上传(即FTP/SFTP)的文件时(即在Web服务器上),您在vim中看到的所有^M都是CR,而linux不会翻译,因为它只使用LF来描述换行符。


更长(带ASCII数字):

NUL==0x00==0==Ctrl+@==^@显示在vim中LF==0x0A==10==Ctrl+JCR==0x0D==13==Ctrl+M==^M显示在vim中

以下是ASCII控制字符列表。通过Ctrl+V、Ctrl+---键---将它们插入Vim。

在Bash或其他Unix/Linux shell中,只需键入Ctrl+---键---。

在Bash中尝试Ctrl+M。这与按Enter键相同,因为shell意识到这是什么意思,尽管Linux系统使用换行符进行换行。

要在bash中插入文字,也可以在它们前面加上Ctrl+V。

试试巴什:

echo ^[[33;1mcolored.^[[0mnot colored.

这使用ANSI转义序列。通过Ctrl+V和Esc键插入两个^[。

您也可以尝试Ctrl+V、Ctrl+M和Enter,这将为您提供以下选项:

bash: $'\r': command not found

还记得上面的\r吗?:>

此ASCII控制字符列表与完整的ASCII符号表不同,因为可以在那里找到通过Ctrl键(哈哈)插入控制台/伪终端/Vim中的控制字符。

而在C语言和大多数其他语言中,通常使用八进制代码来表示这些“字符”。

如果你真的想知道这一切从何而来:TTY解密了。这是你会遇到的关于这个话题的最佳链接,但要注意:有龙。


TL;博士

通常foo=\n,bar=\r。

诀窍如下:

首先,将Vi(m)会话设置为允许使用特殊字符(例如:换行符)进行模式匹配。在.vimrc或.exrc文件中放入这行代码可能是值得的:

:set magic

接下来,请执行以下操作:

:s/,/,^M/g

要获取^M字符,请键入Ctrl+V并按Enter键。在Windows下,按Ctrl+Q,Enter键。我能记住这些的唯一方法就是记住它们的意义有多小:

A: 用来表示换行符的最差控制字符是什么?B: 要么是q(因为它通常意味着“退出”),要么是v,因为很容易错误地键入Ctrl+C并杀死编辑器。A: 做到这一点。