:echo substitute("15", "15\?", "replaced", "")
15
Run Code Online (Sandbox Code Playgroud)
:help substitute()报告我们cpoptions是空的,我们正在使用magic以及其他一些小的差异(似乎并不指向\?不起作用)。
包含以下内容的文件:
15
Run Code Online (Sandbox Code Playgroud)
其次是
:%s/\m15\?/replaced/
Run Code Online (Sandbox Code Playgroud)
的确将替换15用replaced。
任何人都可以向我指出这里的分歧以及手册在哪里解释这一点?
尝试
:echo substitute("15", "15\\?", "replaced", "")
Run Code Online (Sandbox Code Playgroud)
在双引号中,\被解释为。例如,"\n"是换行符,"\\"是反斜杠字符\等。由于表达式"\?"没有特殊解释,它只是成为一个问号?,因此您实际上为15?函数提供了正则表达式。所以你需要转义\才能使字符串被\?Vim识别。
或者,您可以使用单引号(“literal-string”),它不会解释但\按原样接受:
:echo substitute("15", '15\?', "replaced", "")
Run Code Online (Sandbox Code Playgroud)
(要查看差异,请尝试echo "\?"和echo '\?'。)
一些相关的帮助条目是:help expr-"和:help expr-'