为什么对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是换行符, \rCR (回车= 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] 

注意关于patternstring的描述

对于{pattern}请参阅|pattern|
{string}可以是一个文字string,或者什么的
特别; 见|sub-replace-special|

所以现在你知道search模式和replace模式遵循不同的规则。 如果您按照|pattern|的链接进行操作 ,它会将您带到解释Vim中使用的整个正则expression式模式的部分。

同时, |sub-replace-special| 带您进入“4.2替代”的小节,其中包含替代模式,其中\r为换行符/拆分。

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