来自问题 How to replace a character for a newline in Vim? 。替换新行的文本时必须使用\ r,如此
:%s/%/\r/g
但是当替换角色的行尾和换行符时,你可以这样做:
:%s/\n/%/g
本手册的哪一部分记录了这些行为,以及它们背后的原因是什么?
答案 0 :(得分:185)
来自http://vim.wikia.com/wiki/Search_and_replace:
搜索时
...
\n
是换行符,\r
是CR
(回车=Ctrl-M
=^M
)更换时
...
\r
是换行符,\n
是空字节(0x00
)。
答案 1 :(得分:152)
\r
匹配< CR>
\n
匹配行尾 - 匹配字符串而不是 缓冲文本文字换行符 字符匹配。
答案 2 :(得分:99)
另一个方面是传入NULL \0
s//\0/
表示“整个匹配模式”。 (顺便说一句,这是&
)的冗余和长期。
\0
来表示NULL
,因此您使用\n
\n
表示\n
,因此您使用\r
。\r
来表示\r
,但我不知道谁会故意添加该字符。-☈
答案 3 :(得分:47)
:help NL-used-for-Nul
技术细节:
文件中的
<Nul>
个字符在内存中存储为<NL>
。在显示器中 它们显示为“^@
”。翻译是在阅读和写作时完成的 文件。要将<Nul>
与搜索模式相匹配,您只需输入CTRL-@或 “CTRL-V 000”。这可能正是您所期望的。在内部 在搜索模式中,字符将替换为<NL>
。不寻常的是 键入CTRL-V CTRL-J也会插入<NL>
,因此也会搜索<Nul>
在文件中。 {Vi无法处理文件中的<Nul>
个字符}
答案 4 :(得分:10)
首先,打开: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替换”的子部分,其中包含替换模式,其中\r
表示换行/拆分。
(手册本部分的快捷方式是:h :s%
)