来自问题如何在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%
)
%
搜索和更换时有什么用?