从问题如何在Vim中替换换行符?< / >。在替换换行符的文本时,必须使用\r,就像这样
:%s/%/\r/g
但是当替换一个字符的换行符和换行符时,你可以这样做:
:%s/\n/%/g
手册的哪一部分记录了这些行为,它们背后的原因是什么?
:help NL-used-for-Nul
技术细节: 文件中的<Nul>字符在内存中存储为<NL>。在显示屏上 它们被显示为“^@”。翻译是在阅读和写作时完成的 文件。要将<Nul>与搜索模式匹配,只需输入CTRL @或 “ctrl - v 000”。这可能正是你所期望的。在内部的 字符在搜索模式中被替换为<NL>。不同寻常的是 输入ctrl - v CTRL-J也会插入<NL>,因此也会搜索<Nul> 在文件中。{Vi根本无法处理文件中的<Nul>字符} . {Vi无法处理文件中的<Nul>字符
文件中的<Nul>字符在内存中存储为<NL>。在显示屏上 它们被显示为“^@”。翻译是在阅读和写作时完成的 文件。要将<Nul>与搜索模式匹配,只需输入CTRL @或 “ctrl - v 000”。这可能正是你所期望的。在内部的 字符在搜索模式中被替换为<NL>。不同寻常的是 输入ctrl - v CTRL-J也会插入<NL>,因此也会搜索<Nul> 在文件中。{Vi根本无法处理文件中的<Nul>字符}
<Nul>
<NL>
^@
从关于模式的Vim文档:
\r匹配<CR> \n匹配行结束符- 当匹配字符串而不是 缓冲区文本为字面换行符 .字符匹配
\r匹配<CR>
\r
\n匹配行结束符- 当匹配字符串而不是 缓冲区文本为字面换行符
\n
来自http://vim.wikia.com/wiki/Search_and_replace:
搜索时 ... \n是换行符,\r是CR(回车= Ctrl-M = ^M) 当更换 ... \r是换行符,\n是空字节(0x00)。
搜索时
...
\n是换行符,\r是CR(回车= Ctrl-M = ^M)
CR
Ctrl-M
^M
当更换
\r是换行符,\n是空字节(0x00)。
0x00
\0
s//\0/
&
NULL
——☈
首先,打开:h :s,查看文档中关于“Change”的“4.2 Substitute”部分。下面是命令接受的内容:
:h :s
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
注意关于pattern和string的描述
pattern
string
关于{pattern}参见|pattern|。< br > {string}可以是字面值字符串,或的字符串 特殊的;看到|sub-replace-special|。< / p >
{pattern}
|pattern|
{string}
|sub-replace-special|
同时,|sub-replace-special|带你到“4.2 Substitute”小节,其中包含替换模式,其中\r用于换行/分隔。
(这部分手册的快捷方式是:h :s%)
:h :s%