来自问题如何在Vim中替换换行符?。像这样在换行符替换文本时必须使用\ r
:%s/%/\r/g
但是,当用字符替换行尾和换行符时,您可以这样做:
:%s/\n/%/g
手册的哪一部分记录了这些行为,其背后的原因是什么?
来自问题如何在Vim中替换换行符?。像这样在换行符替换文本时必须使用\ r
:%s/%/\r/g
但是,当用字符替换行尾和换行符时,您可以这样做:
:%s/\n/%/g
手册的哪一部分记录了这些行为,其背后的原因是什么?
Answers:
\r符合<CR>
\n匹配行尾-当匹配字符串而不是缓冲区文本时,将匹配文字换行符。
从http://vim.wikia.com/wiki/Search_and_replace:
搜索时
...
\n是换行符,\r是CR(回车=Ctrl-M=^M)更换时
...
\r是换行符,\n是空字节(0x00)。
:h :s%,尤其是最后一段。(via :h :s)
另一个方面是,\0传统上为NULL
s//\0/表示“整个匹配模式”。(顺便说一下,这是多余的,并且比更长&)。
\0意思是NULL,所以你用\n\n指\n,而是用\r。\r用来表示\r,但我不知道谁会故意添加该char。—☈
\n在搜索和替换模式中具有不同含义的深刻见解。很棒的答案。
:help NL-used-for-Nul技术细节:
<Nul>文件中的字符存储<NL>在内存中。在显示屏中,它们显示为“^@”。读写文件时完成翻译。要将a<Nul>与搜索模式匹配,您只需输入CTRL- @或“ CTRL-V 000”。这可能正是您所期望的。在内部,<NL>搜索模式中的字符替换为。与众不同的是,键入CTRL-V CTRL-J还会插入a<NL>,因此也在<Nul>文件中搜索a 。{Vi根本无法处理<Nul>文件中的字符}
首先,打开: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%)
%搜索和更换时有什么用?