为什么对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%
)