如何在Vim中替换换行符?在替换换行符的文本时,必须使用\r,就像这样

:%s/%/\r/g

但是当替换一个字符的换行符和换行符时,你可以这样做:

:%s/\n/%/g 

手册的哪一部分记录了这些行为,它们背后的原因是什么?


:帮助NL-used-for-Nul

Technical detail: <Nul> characters in the file are stored as <NL> in memory. In the display they are shown as "^@". The translation is done when reading and writing files. To match a <Nul> with a search pattern you can just enter CTRL-@ or "CTRL-V 000". This is probably just what you expect. Internally the character is replaced with a <NL> in the search pattern. What is unusual is that typing CTRL-V CTRL-J also inserts a <NL>, thus also searches for a <Nul> in the file. {Vi cannot handle <Nul> characters in the file at all}



来自vim文档的模式:

\r匹配<CR> \n匹配行尾- 当匹配字符串而不是 缓冲区文本为字面换行符 字符匹配。


来自http://vim.wikia.com/wiki/Search_and_replace:

搜索时 ... \n是换行符,\r是CR(回车= Ctrl-M = ^M) 当更换 ... \r是换行符,\n是空字节(0x00)。


另一个方面是\0,传统上是NULL S //\0/表示“整个匹配模式”。(顺便说一下,它与&是冗余的,并且比&长)。

所以不能用\0表示NULL,只能用\n 所以你不能用\n来表示\n,只能用\r。 所以你不能用\r来表示\r,但我不知道谁会故意添加这个char。

—☈


首先,打开:h:s查看文档中关于“变更”的“4.2替换”一节。下面是命令接受的内容:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

注意关于模式和字符串的描述

{模式}参见|模式|。 {string}可以是一个字面值的字符串,或者别的什么 特殊的;看到| sub-replace-special |。

现在您知道了搜索模式和替换模式遵循不同的规则。 如果您遵循|模式|的链接,它将带您到解释Vim中使用的整个regexp模式的部分。

同时|sub- replacement -special|带你到“4.2 Substitute”小节,其中包含了替换的模式,其中\r表示换行/拆分。

(这部分手册的快捷方式是:h:s%)