来自问题How to replace a character for a newline in Vim? . 替换换行符时必须使用 \r ,如下所示
:%s/%/\r/g
但是当替换一个字符的行尾和换行符时,你可以这样做:
:%s/\n/%/g
手册的哪一部分记录了这些行为,它们背后的原因是什么?
来自问题How to replace a character for a newline in Vim? . 替换换行符时必须使用 \r ,如下所示
:%s/%/\r/g
但是当替换一个字符的行尾和换行符时,你可以这样做:
:%s/\n/%/g
手册的哪一部分记录了这些行为,它们背后的原因是什么?
从http://vim.wikia.com/wiki/Search_and_replace:
搜索时
...
\n是换行符,\r是CR(回车=Ctrl-M=^M)更换时
...
\r是换行符,\n是一个空字节 (0x00)。
来自有关模式的 vim 文档:
\r匹配 <CR>
\n匹配行尾 - 当匹配字符串而不是缓冲区文本时,匹配文字换行符。
另一个方面是,\0传统上为 NULL,被认为
s//\0/是“整个匹配的模式”。(顺便说一下,这与 是多余的,并且比 长&)。
\0to 表示NULL,所以你用\n\nto 表示\n,所以你用\r.\rto mean \r,但我不知道谁会故意添加那个 char 。—☈
:help NL-used-for-Nul技术细节:
<Nul>文件中的字符存储<NL>在内存中。在显示屏中,它们显示为“^@”。翻译是在读写文件时完成的。要将 a<Nul>与搜索模式匹配,您只需输入CTRL-@或“ CTRL-V 000”。这可能正是您所期望的。<NL>在内部,该字符在搜索模式中被替换为 a 。不寻常的是,键入CTRL-V CTRL-J也会插入 a<NL>,因此也会在文件中搜索 a<Nul>。{Vi 根本无法处理<Nul>文件中的字符}
首先,打开:h :s查看“更改”文档的“4.2替换”部分。以下是命令接受的内容:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
注意关于pattern和的描述string
为
{pattern}见|pattern|。
{string}可以是文字字符串,也可以是
特殊的;见|sub-replace-special|。
所以现在您知道搜索模式和替换模式遵循不同的规则。如果您点击 的链接|pattern|,它会将您带到解释 Vim 中使用的整个正则表达式模式的部分。
同时,|sub-replace-special|带您进入“4.2 Substitute”小节,其中包含用于替换的模式,其中包括\r换行/拆分。
(这部分手册的快捷方式是:h :s%)