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